题面

wzj的题解

T1

随便搜

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 inline int read(){
 5     int x=0; bool f=1; char c=getchar();
 6     for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
 7     for(; isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^'0');
 8     if(f) return x;
 9     return 0-x;
10 }
11 int T,len;
12 char c[12];
13 ll L;
14 bool dfs2(int wz,ll cur,ll sum,bool Last){
15     if(!(wz^len)) return sum+cur==L ? 1 : 0;
16     if(Last==1 && dfs2(wz,0,sum+cur,0)) return 1;
17     if(dfs2(wz+1,(cur<<3)+(cur<<1)+(c[wz]^'0'),sum,1)) return 1;
18     return 0;
19 }
20 bool dfs(int wz,ll cur,ll sum,bool Last){
21     if(!(wz^len)) return 0;
22     if(Last==1){
23         L=sum+cur;
24         if(dfs2(wz,0,0,0)) return 1;
25     }
26     if(Last==1 && dfs(wz,0,sum+cur,0)) return 1;
27     if(dfs(wz+1,(cur<<3)+(cur<<1)+(c[wz]^'0'),sum,1)) return 1;
28     return 0;
29 }
30 int main(){
31     T=read();
32     while(T--){
33         scanf("%s",c);
34         len=strlen(c);
35         if(dfs(0,0,0,0)) printf("Yes\n");
36         else printf("No\n");
37     }
38     return 0;
39 }
View Code

相关文章: