又是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 }
View Code

相关文章:

  • 2022-02-22
  • 2021-07-07
  • 2021-08-25
  • 2021-04-18
  • 2021-07-06
  • 2021-12-28
  • 2021-12-15
  • 2021-06-15
猜你喜欢
  • 2021-11-18
  • 2022-12-23
  • 2021-08-19
  • 2022-01-13
  • 2022-12-23
  • 2021-04-08
相关资源
相似解决方案