PAT1003 我要通过!

时间:2014-04-28 14:55:50   收藏:0   阅读:739

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于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

分析:此题的关键是要读懂题,其中,XPATX中PAT左右应该有相同的A,并且根据数学上的推算,P上左边的A乘以P和T中间的A得出来的总个数应该T右面A的总数。
自己的代码:
bubuko.com,布布扣
 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 bool JudgePAT(string temp);
 5 
 6 
 7 
 8 int main(int argc, char* argv[])
 9 {
10     int i=0,j;
11     int count;
12     cin>>count;
13     string tempt;
14     while(count--)
15     {
16         //open=true;
17         cin>>tempt;
18         //第一层检验PAT
19         if(!JudgePAT(tempt))
20         {
21             cout<<"NO"<<endl;
22             continue;
23         }
24 
25         //检验PAT中只含有一个P和一个T
26         {
27             int ppos=-1,tpos=-1;
28             int countT=0,countP=0;
29             for(i=0;i<tempt.size();i++)
30             {
31                 if(tempt[i]==T)
32                 {
33                     countT++;
34                     tpos=i;
35                 }
36                 if(tempt[i]==P)
37                 {
38                     countP++;
39                     ppos=i;
40                 }
41             }
42             if(countT!=1||countP!=1)
43             {
44                 cout<<"NO"<<endl;
45                 continue;
46             }
47             else if(countT==1&&countP==1)
48             {
49                 if(tpos-ppos<2)
50                 {
51                     cout<<"NO"<<endl;
52                     continue;
53                 }
54             }
55         }
56         //进行乘法的检验,即将P左边的A的个数与PT中间A的个数进行相乘,应该等于T后面的个数
57         {
58             int left=0,middle=0,right=0;
59             for(i=0;i<tempt.size();i++)
60             {
61                 if(tempt[i]==P)
62                     break;
63                 else if(tempt[i]==A)
64                     left++;
65             }
66             for(;i<tempt.size();i++)
67             {
68                 if(tempt[i]==T)
69                     break;
70                 else if(tempt[i]==A)
71                     middle++;
72             }
73             for(;i<tempt.size();i++)
74             {
75                 if(tempt[i]==A)
76                     right++;
77             }
78             if(left*middle==right)
79             {
80                 cout<<"YES"<<endl;
81             }
82             else
83             {
84                 cout<<"NO"<<endl;
85             }
86             continue;
87 
88         }
89     }
90         return 0;
91     }
92 bool JudgePAT(string temp)
93 {
94     int i;
95     for(i=0;i<temp.size();i++)
96         if(temp[i]!=P&&temp[i]!=A&&temp[i]!=T)
97             return false;
98     return true;
99 }
bubuko.com,布布扣

 

 





PAT1003 我要通过!,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!