您的位置:首页 > 其它

PAT 1003 我要通过! (Basic Level)

2013-05-20 22:46 218 查看
题目:

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

一开始没有看懂题目,提交了一次错误的。后来看了一下,第二个和第三个条件,得出:字符串中间的'A'的个数可以随意个,但是每增加一个,在'T'右边的'A'个数就要增加。增加的数量为'P'左边的'A'的个数。所以思路就是:将字符串分为3个部分,'P'左边的,'p'和'T'之间的,还有'T'右边的。这三部分必须都是由'A'或者空字符串组成。需要满足的条件就是:假设这三部分'A'的个数分别为a,b,c那么一定要满足c>=a*(b-1)。代码如下:


import java.util.*;
public class Main
{
public static void main(String args[]){
Scanner cin = new Scanner(System.in);
int number = Integer.parseInt(cin.next());
String[] input = new String[number];
for(int i = 0;i < number;i++)
input[i] = cin.next();

for(int i = 0;i < number;i++){
String[] out = new String[3];
out = divide(input[i]);
if(ifHasPT(input[i])){
if(ifA(out[0]) && ifA(out[1]) && ifA(out[2]) && out[1].length() > 0){
if(out[2].length() >= out[0].length() * out[1].length())
System.out.println("YES");
else
System.out.println("NO");
}
else
System.out.println("NO");
}
else
System.out.println("NO");
}
}

public static Boolean ifHasPT(String s){
int Pnum = 0;
int Tnum = 0;
for(int i = 0;i < s.length();i++){
if('P' == s.charAt(i))
Pnum++;
if('T' == s.charAt(i))
Tnum++;
}
if(1 == Pnum && 1 == Tnum)
return true;
else
return false;
}
public static Boolean ifA(String s){
if(s.length() == 0)
return true;
for(int i = 0;i < s.length();i++){
if(s.charAt(i) != 'A')
return false;
}
return true;
}
public static String[] divide(String s){
String[] result = new String[3];
int Pindex = 0;
if(ifHasPT(s)){
for(int i = 0;i < s.length();i++){
if('P' == s.charAt(i)){
result[0] = s.substring(0, i);
Pindex = i;
}
if('T' == s.charAt(i)){
result[1] = s.substring(Pindex + 1,i);
result[2] = s.substring(i + 1,s.length());
}
}
}
return result;
}

}


View Code

但是如果这样写,会有一个测试点不通过,显示为“返回非零”。还希望大家看后指点一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: