“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。
输入格式: 每个测试输入包含1个测试用例。第1行给出一个自然数n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。
输出格式:每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。
输入样例:8 PAT PAAT AAPATAA AAPAATAAAA xPATx PT Whatever APAAATAA输出样例:
YES YES YES YES NO NO NO NO首先分析题目!这道题目的题意不是很好理解!
那么不论这个字符串是怎样的!他必须首先满足条件一:
1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
如果这个条件都不满足!再接着分析浪费时间增加了程序的时间复杂度!
写一个 函数就OK
bool check(char s[],int length){
for(int i=0;i<length;i++){
if(/*s[i]不等于这三个子母钟的任何一个*/)
return false;
}
return true;
}
另外我们必须找到这道题的量化关系,这是关键!他们存在什么样的关系呢?
通过2、3条件 归纳推理
PAT满足
AAPATAA如果满足 这是满足与条件二的 则对应于条件三里面 a=AA b='A C=AA 根据条件三的递推可以得出
aPbATac也满足 也就是 AAPAAATAAAA也满足条件 这里的a=AA b=AAA c=AAAA
在递推 aPbATac 也满足 也就是 AAPAAAATAAAAAA也满足
可以发现这样的规律 a*(b+1)=a+c
上面通过归纳将其进行了量化!
接下来编程就so easyle !
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include <sstream>
#include<vector>
#include<map>
#include <cstdlib>
using namespace std;
#define MAX 1000
/*1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。*/
//首先判断这个字符串是否符合条件一:只包含PAT三个字符
bool check(char ch[],int length){
for(int i=0;i<length;i++){
if(ch[i]!='P'&&ch[i]!='A'&&ch[i]!='T'){
return false;
}
}
return true;
}
int main(){
int n;
scanf("%d",&n);
char s[105];
int length;
while(n--){
memset(s,0,105);
scanf("%s",s);//输入字符串
length=strlen(s);
if(check(s,length)){
//分别统计ABC位置A的个数
//可以量化得知 a*(b+1)=a*c 为什么呢?递推归纳 这个式子是核心 以后解题也需要这样量化!!不量化费劲!
int cnta=0;
int cntb=0;
int cntc=0;
for(int i=0;i<length;i++){
if(s[i]!='P')
cnta++;
else
break;
}
for(int i=0;i<length;i++){
if(s[i]!='T')
cntb++;
else
break;
}
cntc=length-cntb-1;
cntb=cntb-cnta-1;
if(cntb==0){
printf("NO\n");
}else{
if(cnta*cntb==cntc){
printf("YES\n");
}else{
printf("NO\n");
}
}
}else
printf("NO\n");
}
return 0;
}