PAT乙级1003

1003 我要通过!(20)(20 分)

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到“答案正确”的条件是:

1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;\

  1. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;\
  2. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

现在就请你为PAT写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式: 每个测试输入包含1个测试用例。第1行给出一个自然数n (&lt10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。

输出格式:每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。

输入样例:

8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA

输出样例:

YES
YES
YES
YES
NO
NO
NO
NO
#include<iostream>
using namespace std;
int main()
{
	char a[10][100];
	int i,j,n;
	int before,inner,after;//存储三处的A 
	int P,T;//检测P,T,存储数量 
	int b[10];//中转,存放状态 
	cin>>n;//输入字符串个数 
	for(i = 0; i < n; i++){
		b[i]=0;
	}//初始化 
	for(i=0;i<n;i++)
	{
		cin>>a[i];
	}//输入字符串 
	for(i=0;i<n;i++)
	{
		before = 0; 
		after = 0;
		inner = 0;
		P=0;
		T=0;//初始化 
		for(j=0;a[i][j]!='\0';j++)//检测字符串 
		{
			if(a[i][j]!='P'&&a[i][j]!='A'&&a[i][j]!='T')
			    b[i]=-1;//检测字符串是否只有PAT 
			else if(a[i][j]=='P'&&T==0)P++;//当P检测到且T未检测到,将P记录下来 
			else if(a[i][j]=='T'&&P== 1)T++;//当T检测到且前面只有一个P,将T记录下来 
			else if(a[i][j] == 'A')//当检测到A时 
			{
			    if(P == 0 && T == 0)//当A在PT前面时 
				    before++;
			    else if(P == 1 && T == 0)//当A在PT之间时 
				    inner++;
			    else if(T == 1 && P == 1)//当A在PT后面时 
				    after++;
			}
		}
		if(b[i]==0){
		    if(j < 3)b[i] = -1;//只有两个字符 
	        else if(T != 1||P != 1)b[i] = -1; //没有T或者没有P 
		    else if(after == before * inner)b[i] = 1; 
		}
	}
	for(i = 0; i < n; i++)
	{
		if(b[i]==1)cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/song68753/article/details/81518293