“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3. 如果 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
被这题卡了一会的原因在与题意没理解好,第一个条件不用说,第二个条件“xPATx”,里面的左右两端的x是相同的字符串!!左右两端的x是相同的字符串!!左右两端的x是相同的字符串!!那后面的第三个条件就容易计算了,一开始中间部分肯定是“PAT”,中间每增加一个‘A’,右端增加a,也就等价于:a*b=c,均指字符串a,b,c中‘A’的个数。其他的在注意下判断即可。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cctype> #include <cstdlib> #include<cmath> #include <string> #include <map> #include <set> #include <queue> #include <vector> #include <stack> #include <cctype> using namespace std; typedef unsigned long long ull; #define INF 0xfffffff int main() { int x,y,a,b,c,q,w,e,ok; string s1; cin>>x; while(x--) { y=q=w=e=ok=0; cin>>s1; for(int i=0;i<s1.size();++i) { if(s1[i]!=‘P‘&&s1[i]!=‘A‘&&s1[i]!=‘T‘) { y=0; ok=1; break; } if(s1[i]==‘P‘) { ++q; a=i; } if(s1[i]==‘T‘) { ++w; b=i-a-1; } if(s1[i]==‘A‘) { ++e; } } c=s1.size()-a-b-2; if(a*b==c) y=1; if(q!=1||w!=1||e==0) ok=1; if(!ok&&y) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
时间: 2024-10-10 01:48:31