题目
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于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
代码示例及解析
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main{
static Scanner sc;
public static void main(String[] args) {
sc = new Scanner(System.in);
int a = sc.nextInt();
if(a<10)//由题意可知,第1行给出一个自然数n (<10),是需要检测的字符串个数。
arr(a);
}
//定义一个函数,实现判断
public static void arr(int f) {
List<String> al = new ArrayList<String>();
int i=1;
while(i<=f) {
String s= sc.next();
al.add(s);
i++;
}
//输出集合中的所有字符串
for (String string : al) {
int a=0,p=0,t=0,p1=0,t1=0;//定义一些变量,用来判别字符个数
char [] s = string.toCharArray(); //字符串转换成字符数组
//遍历每个字符数组,判断输出什么
for (char str : s) {
/**
* 确定只有PAT三个字符,否则直接输出“NO”,同时确定3个位置A的个数
* 有题可知P前面吗A的个数乘以PT之间A的个数等于T后面A的个数
* p代表P前面Ade个数,t代表PT之间A的个数,a代表T后面A的个数
* 所以t*p==a
* p1,t2用来判断P和T的个数是不是1
*/
if(str=='A'||str=='P'||str=='T') {
if('A'==str) {
a++;
}else if('P'==str) {
p1++;
p=a;
a=0;
}else if(('T'==str)&&(p1==1)) {//P必须在T的前面
t1++;
t=a;
a=0;
}
}else {
break;
}
}
if((t*p==a)&&(a!=0||p!=0||t!=0)&&(p1==1&&t1==1)) {
System.out.println("YES");
}else {
System.out.println("NO");
}
}
}
}
Python实现
#!/usr/bin/python
n = input()
i = 0
str_list = []
while i<n:
i = i+1
s = raw_input()
str_list.append(s)
for item in str_list:
p = 0
a = 0
t = 0
aa = 0
ap = 0
at = 0
if 'P' not in item or 'A' not in item or 'T' not in item:
print('NO')
continue
for i in item:
if i not in 'PAT':
p=a=t=0
break
if i == 'A' :
a=a+1
elif i == 'P':
p=p+1
elif i == 'T':
t=t+1
if i == 'A' and p==0 and t==0:
aa=aa+1
elif i=='A' and p==1 and t==0:
ap=ap+1
elif i=='A' and t==1:
at=at+1
if p==1 and a>0 and t==1 and aa*ap==at:
print('YES')
else:
print('NO')