文章
1
粉丝
0
获赞
0
访问
64
dfs,u控制每次枚举的是A、B、C还是D,对于每个枚举的结果check函数去检查是否符合题意
#include<bits/stdc++.h> using namespace std; int n,cnt; string s; vector<int> id; bool check(){ int ans = 0; for (int i = 0; i < 4; ++i) ans += id[i]; if(ans != s.size()) return false; size_t p = 0; for(int i = 0;i < 4;i++){ int len = id[i]; string s1 = s.substr(p,len); int num = stoi(s1) ; if(num > 255) return false; if(to_string(num) != s1) return false; p += len; } return true; } void dfs(int u){ if(u == 4){ if(check()) cnt ++; return; } for(int i = 1;i <= 3;i++){ id.push_back(i); dfs(u + 1); id.pop_back(); } } int main(){ cin>>n; while(n--){ cin>>s; cnt = 0; dfs(0); cout<<cnt<<endl; } return 0; }
登录后发布评论
暂无评论,来抢沙发