“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
P、 A、 T
这三种字符,不可以包含其它字符;A
组成的字符串;a、 b、 c
均或者是空字符串,或者是仅由字母 A
组成的字符串。现在就请你为PAT写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。
每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n ( ≤ 10 ) n (≤10) n(≤10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。
每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES
,否则输出 NO
。
10 PAT PAAT AAPATAA AAPAATAAAA xPATx PT Whatever APAAATAA APT APATTAA
结尾无空行
YES YES YES YES NO NO NO NO NO NO
结尾无空行
#include<iostream> #include<string.h> using namespace std; //返回字符 a出现的次数 int getNum(char *p ,char a,int m){ int i=0,num=0; while(num<m){ if(p[num]==a){ // cout<<p[num]<<endl; i++; num++; } else num++; } return i; } //返回字符 a所在的位置 int getX(char *p,char a){ int i=0; while(*p){ if(p[i]==a){ return i; } else{ i++; } } } int main(){ int n,nlong; cin>>n; while(n--){ bool flag=true; char pat[101]; scanf("%s",pat); nlong =strlen(pat); // cout<<nlong; for(int i=0;i<nlong;i++){ if(pat[i]!='A'&&pat[i]!='P'&&pat[i]!='T'){ flag=false; break; } } // cout<<flag; if(flag==false) {cout<<"NO"; if(n>=1) cout<<endl; } else{ int p=0,t=0,px,tx; p=getNum(pat,'P',nlong); t=getNum(pat,'T',nlong); // cout<<p<<endl<<t<<endl; if(p!=1||t!=1){ cout<<"NO"; if(n>=1) cout<<endl; } else{ px=getX(pat,'P'); tx=getX(pat,'T'); // cout<<px<<endl<<tx<<endl; int a1,a2; a1=getNum(pat,'A',px); a2=getNum(pat,'A',nlong)-(tx-px-1)-a1; // cout<<a1<<endl<<a2<<endl; int b=tx-px; if(b<=1){ cout<<"NO"; if(n>=1) cout<<endl; } else{ if(a2==(b-1)*a1){ cout<<"YES"; if(n>=1){ cout<<endl; } } else{ cout<<"NO"; if(n>=1){ cout<<endl; } } } } } } }