【PAT】B1003 我要通过!

时间:2024-10-20 17:36:38

我觉得这是PAT中最坑的一道题,表述令人很不适应

分析过程:

条件1.只有P,A,T三种字符

条件2.xPATx正确,x可以是空串,或者由A组成的字符串

条件3.如果aPbTc是正确的,aPbATca也是正确的,a,b,c与上一条件x相同

1,2为基本条件,根据1,2推3

根据条件1,2=》》》xPATx正确

条件3中:

首先有xPATx正确

aPbTc中a=x,b=1,c=x;

则有aPbATca中a=x,b+1=2,c+a=2x;

则有a=x,b+1=3,c+a=3x;

。。。。

以此类推可得对于aPbTc要满足ab=c,而且b》=1

<-------------------------------------------->

解决了逻辑问题,要处理代码了。

将一行数据存入字符串,遍历,每个字符map映射加一,并保存PT的位置

只要map中PT只有一个,A至少一个

另外要使a
b = c,只要p * (t - p - 1) == strlen(arr) - t - 1,不用考虑T是否在P前边,如果那样计算出来的b为负

#include<stdio.h>
#include<string.h>
#include<map>
using namespace std; int main() {
int N; scanf("%d", &N);
for (int i = 0; i<N; i++) {
char arr[101];
scanf("%s", arr);
int p, t;
map<char, int> mp;
for (int j = 0; j<strlen(arr); j++) {
mp[arr[j]]++;
if (arr[j] == 'P') p = j;
if (arr[j] == 'T') t = j;
}
if (mp['P'] == 1 && mp['T'] == 1 && mp['A'] != 0 && mp.size() == 3 && p*(t - p - 1) == strlen(arr) - t - 1) {
printf("YES\n");
}
else {
printf("NO\n");
}
}
return 0;
}