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。
输入样例:
输出样例:
View Code
但是如果这样写,会有一个测试点不通过,显示为“返回非零”。还希望大家看后指点一下。
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于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
但是如果这样写,会有一个测试点不通过,显示为“返回非零”。还希望大家看后指点一下。
相关文章推荐
- PAT (Basic Level) Practise (中文)- 1003. 我要通过!(20)
- Pat(Basic Level)Practice--1003(我要通过)
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20)
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20)
- PAT(Basic Level)1003 我要通过!
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20) C语言
- PAT (Basic Level)1003.我要通过
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20)
- PAT (Basic Level) Practise 1003. 我要通过!
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20)
- PAT乙级真题及训练集 PAT (Basic Level) Practise (中文)1003. 我要通过!
- PAT (Basic Level) Practise (中文) 1003.我要通过
- PAT(Basic Level)_1003_我要通过!
- PAT Basic Level 1003. 我要通过!(20)
- PAT(basic level) 1003 我要通过
- PAT (Basic Level) Practise (中文) 1003.我要通过!(20)
- PAT Basic Level 1003:我要通过!
- PAT BASIC LEVEL 1003. 我要通过!(20)
- PATBasic——1003. 我要通过!(20)
- PAT basic 1003. 我要通过!(20)