PAT 1003. 我要通过!(20)

时间:2023-03-10 04:26:43
PAT 1003. 我要通过!(20)

"答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于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
 #include<stdio.h>
#include<string.h>
int main(){
/*
后前面A的数目/P前面A的数目等于P与A中间的A的数目。
办法有点笨
*/
int n;
scanf("%d",&n);
char c[];
int i;
int b;//数组长度
float a1=;//P前面A的数目
float a2=;//P后面,T中间,A的数目
float a3=;//T后面A的数目
int k1=;//P的数目
int k2=;//T的数目
int p;//P的位置
int t;//T的位置
int y;//跳出第二层循环
while(n--)
{
y = ;
k1 = ;
k2 = ;
a1 = ;
a2 = ;
a3 = ;
scanf("%s",c);
b = strlen(c);
/*
判断是不是有多个P或T以及P与T的位置
*/
for(i=;i<b;i++)
{
if(c[i]=='P')
{
p = i;
k1++;
}
if(c[i]=='T')
{
t = i;
k2++;
}
}
if(k1!=||k2!=)
{
printf("NO\n");
continue;
}
/*
计算P之前A的数目,同时若不是A字符输出NO
*/
for(i=;i<p;i++)
{
if(c[i]=='A')
{
a1++;
}
else
{
printf("NO\n");
y=;
break;
} }
if(y)
{
continue;
}
/*
判断P与T之间的A的数目,若不是A字符输出NO
*/
for(i=p+;i<t;i++)
{
if(c[i]=='A')
{
a2++;
}
else{
printf("NO\n");
y=;
break;
}
}
if(y)
{
continue;
}
/*
计算T之后A的数目,不是字符A输出NO
*/
for(i=t+;i<b;i++)
{
if(c[i]=='A')
{
a3++;
}
else{
printf("NO\n");
break;
}
}
/*
判断条件
*/
if(a1!=)
{
if(a3/a1!=a2)
{
printf("NO\n");
continue;
} }
/*
若a1是0则a3也一定是0
*/
else
{
if(a3!=)
{
printf("NO\n");
continue;
}
}
if(a2==)
{
printf("NO\n");
continue;
}
/*
其他条件都成立
*/
printf("YES\n");
}
}