匹配
题目大意
有多组数据,每组数据有以下东西:
1.一个n。
2.一串有n个字母的字符串。
然后A…M分别与Z…N配对(如A,Z),然后一个配对中的左边若在另一个配对中,另一边也一定要在这个配对中才算配对。
配对输出1,否则输出0。
输入样例
12
AabcZBBefYeY
输出样例
1
数据范围
50%的数据:N<=1000
100%的数据:N<=1000000
思路
这道题就是模拟。
分左括号和右括号两种情况处理,如果一一对应就输出1,否则输出0,就可以了。
代码
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
string c;
bool t;
int n,a[1000001],f;
int main()
{
// freopen("match.in","r",stdin);
// freopen("match.out","w",stdout);
scanf("%d",&n);//读入
while(n)
{
t=0;
f=0;
memset(a,0,sizeof(a));//初始化
cin>>c;//读入
for (int i=0;i<n;i++)
{
if (c[i]>='A'&&c[i]<='M')//处理左括号情况
{
f++;
a[f]=c[i]-'A'+1;
}
else if (c[i]>='N'&&c[i]<='Z')//处理右括号情况
{
if(a[f]=='Z'-c[i]+1) {a[f]=0;f--;}
else {t=1;break;}
}
}
if(f) t=1;
if (t) printf("0\n");//不配对
else printf("1\n");//配对
n=0;
scanf("%d",&n);//读入
}
// fclose(stdin);
// fclose(stdout);
return 0;
}