PAT乙级1003
1003 我要通过!(20)(20 分)
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;\
任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;\
- 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。
现在就请你为PAT写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。
输入格式: 每个测试输入包含1个测试用例。第1行给出一个自然数n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。
输出格式:每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。
输入样例:
8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
输出样例:
YES
YES
YES
YES
NO
NO
NO
NO
#include<iostream>
using namespace std;
int main()
{
char a[10][100];
int i,j,n;
int before,inner,after;//存储三处的A
int P,T;//检测P,T,存储数量
int b[10];//中转,存放状态
cin>>n;//输入字符串个数
for(i = 0; i < n; i++){
b[i]=0;
}//初始化
for(i=0;i<n;i++)
{
cin>>a[i];
}//输入字符串
for(i=0;i<n;i++)
{
before = 0;
after = 0;
inner = 0;
P=0;
T=0;//初始化
for(j=0;a[i][j]!='\0';j++)//检测字符串
{
if(a[i][j]!='P'&&a[i][j]!='A'&&a[i][j]!='T')
b[i]=-1;//检测字符串是否只有PAT
else if(a[i][j]=='P'&&T==0)P++;//当P检测到且T未检测到,将P记录下来
else if(a[i][j]=='T'&&P== 1)T++;//当T检测到且前面只有一个P,将T记录下来
else if(a[i][j] == 'A')//当检测到A时
{
if(P == 0 && T == 0)//当A在PT前面时
before++;
else if(P == 1 && T == 0)//当A在PT之间时
inner++;
else if(T == 1 && P == 1)//当A在PT后面时
after++;
}
}
if(b[i]==0){
if(j < 3)b[i] = -1;//只有两个字符
else if(T != 1||P != 1)b[i] = -1; //没有T或者没有P
else if(after == before * inner)b[i] = 1;
}
}
for(i = 0; i < n; i++)
{
if(b[i]==1)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
还没有评论,来说两句吧...