题目
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
- 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
- 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
- 如果 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
思路
感觉自己都大三了,在做题方面依然像个初学者,哎。还是得勤刷题啊。
此题是道规律题,考点就是让学生找规律。
三个条件都需要满足。首先第一个条件,就是不出现其他字符,直接判断即可;第二个条件,就是说明PAT两边的x是相同字符串,而且只能是由A组成的字符串;对于第三个条件,这个地方其实我没有理解成数量关系,因此导致有些混乱:一开始中间部分肯定是“PAT”,中间每增加一个‘A’,右端增加a,也就等价于:a*b=c,均指字符串a,b,c中‘A’的个数。更清晰的理解为a*(b+1)=c+a(哎,我为什么没有想到。)
我发现自己的薄弱点就是不知道怎么计算这些不同位置A的个数,并且在考虑P和T位置可能颠倒的情况没有使用下标,而是老想着在循环中计算个数。另外就是对字符串的操作还不熟练,并且题意也没有弄明白,导致判断条件特别多,也没有做对。知道了一定的方法后,重新在原来的框架下做。
现在自己的版本,满分20分,只能得18分,还有两分不知道为何错误。贴出我自己看着都嫌弃的代码:
1 |
|
哎,不忍直视的代码。虽然说得到了一定的分数,但是在上面计算三个位置A的个数,我是看了别人的才会的。一直想着如何在循环里计算个数,没想到P和T的坐标也可以利用起来的,太傻了。下面先查找与我的思路相似的代码进行修改:
1 |
|
通过对比可以知道,我不一样的地方时,没有判断P,A,T三个字母有可能不在的情况,这也是我错误的原因。考虑得太不周到了。。。戴斯铭你清醒一点!做题要考虑所有情况!另外,find函数非常方便,要善于使用。基本就按照上面的思路,即可将题目完成。