前往:我自己搭建的博客
题目
题解
题目的描述比较复杂难懂。题中所说的可以通过添加“1”和“+”转化为数学表达式的合法序列,其实就是嵌套关系正确的括号序列,用一个栈即可判断合法性。然后穷举所有ABC可能的值(左括号或右括号),逐一判断。
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=100;
char a[maxn];
stack<int> s;
bool work(int x,int y,int z) //1代表左括号,2代表右括号
{
while(s.size()) s.pop();
for(int i=0; ;i++)
{
if(!a[i]) break;
int cur;
if(a[i]=='A') cur=x;
else if(a[i]=='B') cur=y;
else cur=z;
if(cur==2)
{
if(s.size()) s.pop();
else return 0;
}
else s.push(cur);
}
if(s.size()) return 0;
else return 1;
}
int main()
{
int T; scanf("%d",&T);
while(T--)
{
scanf("%s",a);
bool can=0;
for(int x=1;x<=2;x++)
for(int y=1;y<=2;y++)
for(int z=1;z<=2;z++)
if(work(x,y,z)) can=1;
if(can) printf("YES\n");
else printf("NO\n");
}
return 0;
}