“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
- 字符串中必须仅有
P
、A
、T
这三种字符,不可以包含其它字符; - 任意形如
xPATx
的字符串都可以获得“答案正确”,其中x
或者是空字符串,或者是仅由字母A
组成的字符串; - 如果
aPbTc
是正确的,那么aPbATca
也是正确的,其中a
、b
、c
均或者是空字符串,或者是仅由字母A
组成的字符串。
现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。
输入格式:
每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 nnn (<10<10<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。
输出格式:
每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES
,否则输出 NO
。
输入样例:
8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
输出样例:
YES
YES
YES
YES
NO
NO
NO
NO
#include <cstdio>
int main()
{
int n;//字符串的个数
int i;
char c;//定义每次输入的字符
scanf("%d", &n);
while (getchar() != '\n');//清空缓存区
for (i = 0; i < n; i++)
{
int count[3] = {0};//用来标记不同位置的A个数
int tag = 0; //标记变量
while ((c = getchar()) != '\n')
{
if ('A' == c)//统计字符A的个数
{
count[tag]++;//P前的A标记tag=0
}
else if ('P' == c && 0 == tag)//如果输入的是P
{
tag = 1;//在P和T之间出现A标记tag=1
}
else if ('T' == c && 1 == tag)//如果 输入的是T
{
tag = 2;//输入T后
}
else
{
break; //如果第一个字符不是A或者P则终止对该字符串继续判断
}
}
if (c == '\n' && 2 == tag && count[1] && count[2] == count[0] * count[1])//字符串要包括P,T及A
{
printf("YES\n");
}
else
{
printf("NO\n");
}
if(c != '\n')//能来继续判断下一个字符串
while(getchar() != '\n');
}
return 0;
}
总结
- 这是考察对字符串的处理,代码中主要有
count[3]
、tag
以及对 P T 判断 count[tag]
和tag = 0
的配套使用,分别统计P
之前的A
的个数,T
之后的A
的个数,P
和T
之间的A
的个数