解析:
链接
感谢上面大佬的解析
答案:
//1003 我要通过! (20分)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n;
scanf("%d", &n);
getchar();
int cnt = 0;
char s[200];
int p = 0, t = 0; //记录P和T出现次数, 和用于记录P,T在字符串中的下标
while (cnt < n)
{
//重置pt
p = 0;
t = 0;
gets(s);
//遍历判断是否只有PAT, 并确保只有一个P, 一个T
for (int i = 0; i < (int)strlen(s); i++)
{
if ( !(s[i] == 'P' || s[i] == 'A' || s[i] == 'T') )
{
printf("NO\n");
goto CONTINUE;
}
if (s[i] == 'P')
{
p++;
}
else if (s[i] == 'T')
{
t++;
}
}
if (p != 1 || t != 1)
{
printf("NO\n");
goto CONTINUE;
}
//重置pt
p = 0;
t = 0;
//获得P, T的位置
for (int i = 0; i < (int)strlen(s); i++)
{
if (s[i] == 'P')
{
p = i;
}
else if (s[i] == 'T')
{
t = i;
}
}
// printf("%d %d\n", p, t);
if (p + 1 == t)
{
printf("NO\n");
goto CONTINUE;
}
else if (p == 0 && t == (int)strlen(s)-1)
{
printf("YES\n");
goto CONTINUE;
}
else if (p*(t-p-1) == (int)strlen(s)-1-t)
{
printf("YES\n");
goto CONTINUE;
}
else
{
printf("NO\n");
goto CONTINUE;
}
CONTINUE:
cnt++;
}
return 0;
}