又是AK失败的一天
T1 小M的算式
题目大意:
一个数字组成的字符串 每两个字符间可以加入+或=或不加入符号(整个串只能加入一个=)
求这个字符串能否变成一个等式
思路:
爆搜 枚举一下等号出现位置
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<cmath> 6 #include<algorithm> 7 #include<queue> 8 #include<vector> 9 #include<map> 10 #define inf 2139062143 11 #define ll long long 12 #define MAXN 100100 13 using namespace std; 14 inline int read() 15 { 16 int x=0,f=1;char ch=getchar(); 17 while(!isdigit(ch)) {if(ch=='-')f=-1;ch=getchar();} 18 while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();} 19 return x*f; 20 } 21 int n,m,i,ok; 22 ll a[2],t,f; 23 char s[50],tmp[50]; 24 inline void work() 25 { 26 for(i=1,f=t=a[0]=a[1]=0;i<=m;i++) 27 { 28 if(isdigit(tmp[i])) t=t*10+tmp[i]-'0'; 29 else if(tmp[i]=='+') a[f]+=t,t=0; 30 else a[f]+=t,f^=1,t=0; 31 } 32 a[f]+=t; 33 if(a[0]==a[1]) ok=1; 34 } 35 void dfs(int x,int mdf) 36 { 37 if(x==n) {if(mdf) work();return ;} 38 tmp[++m]=s[x]; 39 dfs(x+1,mdf);if(ok==1) return ; 40 tmp[++m]='+';dfs(x+1,mdf);if(ok==1) return ;m--; 41 if(!mdf) {tmp[++m]='=';dfs(x+1,1);if(ok==1) return ;m--;} 42 m--; 43 } 44 int main() 45 { 46 freopen("equation.in","r",stdin); 47 freopen("equation.out","w",stdout); 48 int T=read(); 49 while(T--) 50 { 51 scanf("%s",s);n=strlen(s),m=0; 52 ok=0;dfs(0,0); 53 puts(ok?"Yes":"No"); 54 } 55 }