• 注册
  • 赞助本站

    • 微信
    • 支付宝
    • Q Q

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

    • 查看作者
    • 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.4k