• 注册
  • 赞助本站

    • 支付宝
    • 微信
    • QQ

    感谢一直支持本站的所有人!

    • 查看作者
    • 1003. 我要通过!(20)

      一.  题目

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

      二.  思路

      大多数同学包括我做不出来这个题的最大原因是因为读不懂题意,其实题意很简单,得到“答案正确”的三个条件可以用这样总结:

      1.   字符串只能由且仅有PAT这三个字符组成
      2.   P之前的A数目乘以P与T之间的A的数目等于P后面的A的数目   ——摘自acm_ted
      3.   以 PAT 为例, 包含PAT这三个字符,且P前面0个A,P和T中间,1个A,0 * 1 = 0 ,T后面0个A,则答案正确
      4.  aPbTc 是正确的,那么 aPbATca 也是正确的,比如a代表2个A,b代表3个A,则aPbTc中的c就是 2 * 3 = 6个A,则aPbATca 中,2 * (3 + 1) = 8 = c + a

      三.  答案

      import java.util.Scanner;
      public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int length = input.nextInt(); String[] str = new String[length]; for (int i = 0; i < length; i++) { str[i] = input.next(); } new Main().isTrue(str); input.close(); } public static void isTrue(String[] str) { int i = 0; for (i = 0; i < str.length; i++) { int j = 0; for (j = 0; j < str[i].length(); j++) { if (str[i].length() >= 3 && (str[i].charAt(j) == 'P' || str[i].charAt(j) == 'A' || str[i].charAt(j) == 'T')) { } else { System.out.println("NO"); break; } } if (j == str[i].length()) { int a = str[i].indexOf("P"); int b = str[i].indexOf("T") - 1 - a; //aapaat int c = str[i].length() - 1 - str[i].indexOf("T"); if (a * b == c) System.out.println("YES"); else System.out.println("NO"); } } }
      }

      四.  总结

      1.   本题一开始没做出来的主要原因是没有理解题意
      2.   理解题意后,很快有了思路,但是一直提交都是不对,每一次都是输出样例的格式有问题,比如YES输成了yes,println输出成了print,比赛的时候,一定要切记输出样例和题目要求完全相同,无论是换行还是大小写。
    • 1
    • 0
    • 0
    • 9.6k
    • 梁兴健

      请登录之后再进行评论

      登录
    • 单栏布局 侧栏位置: