答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到“答案正确”的条件是:

  1. 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;
  2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
  3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:

每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (<),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。

输出格式:

每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES,否则输出 NO

输入样例:

  1. 8
  2. PAT
  3. PAAT
  4. AAPATAA
  5. AAPAATAAAA
  6. xPATx
  7. PT
  8. Whatever
  9. APAAATAA

输出样例:

  1. YES
  2. YES
  3. YES
  4. YES
  5. NO
  6. NO
  7. NO
  8. NO
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Threading.Tasks;
  8.  
  9. namespace ConsoleApp5
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. /*字符串中只能含有PAT,1个P,1个T,多个A,且P一定在T前,PT直接至少一个A
  16. * xPATx是正确的,(x为空串或者A)
  17. * 条件3基于条件2,若aPbTc is right,那么aPAbTca 也是right
  18. * 假设A(n),B(n),C(n),为n次递归后含有A的个数
  19. * 基于条件2
  20. * 根据条件得A(1)=C(1),B(1)=1
  21. * 根据条件3
  22. * A(n)=A(1),B(n)=B(n-1)+1,C(n)=C(n-1)+A(1)
  23. * 解的
  24. * A(n)=A(1)
  25. * B(n)=B(1)+(n-1)=1+n-1=n
  26. * C(n)=C(1)+(n-1)*A(1)=n*A(1)
  27. * =>A(n)*B(n)=C(n)
  28. */
  29.  
  30. int count = ;
  31. //输入一个数值,表示要测试多少个用例
  32. count = Convert.ToInt32(Console.ReadLine());
  33. //存放输入的用例
  34. string[] strIn = new string[count];
  35. //存放YES or NO
  36. string[] strOut = new string[count];
  37. //输入用例并存放在strIn数组中
  38. for (int i = ; i < count; i++)
  39. {
  40. strIn[i] = Console.ReadLine();
  41. }
  42.  
  43. //对用例进行判断
  44. for (int i = ; i < count; i++)
  45. {
  46. //获取用例中"P","T"的个数
  47. int pnumber = Regex.Matches(strIn[i], "P").Count;
  48. int tnumber = Regex.Matches(strIn[i], "T").Count;
  49. //获取用例中"P""T"的下标
  50. int indexP = strIn[i].IndexOf("P");
  51. int indexT = strIn[i].IndexOf("T");
  52. //判断用例是否只含有PAT三种字符
  53. for (int j = ; j < strIn[i].Length; j++)
  54. {
  55. if (strIn[i][j]!='A'&& strIn[i][j] != 'P' && strIn[i][j] != 'T' )
  56. {
  57. strOut[i] = "NO";
  58. }
  59. //筛选出只含有PAT字符的字符串
  60. else
  61. {
  62. //筛选出P,T个数只为1的字符串
  63. if (pnumber == && tnumber == )
  64. {
  65. //P在A前面
  66. if (indexP < indexT)
  67. {
  68. //获取lengtha,lengthb,lengthc,表示A(n),B(n),C(n)
  69. int lengtha, lengthb, lengthc;
  70. string a, b, c;
  71. a = strIn[i].Substring(, indexP + );
  72. lengtha = Regex.Matches(a, "A").Count;
  73.  
  74. b = strIn[i].Substring(indexP + , indexT - indexP - );
  75. lengthb = Regex.Matches(b, "A").Count;
  76.  
  77. c = strIn[i].Substring(indexT + );
  78. lengthc = Regex.Matches(c, "A").Count;
  79. //排除PT直接没有A的字符串
  80. if (lengthb==)
  81. {
  82. strOut[i] = "NO";
  83. break;
  84. ;
  85. }
  86. //满足条件A(n)*B(n)=C(n)
  87. if (lengtha * lengthb == lengthc)
  88. {
  89. strOut[i] = "YES";
  90. }
  91. else
  92. {
  93.  
  94. strOut[i] = "NO";
  95. }
  96.  
  97. }
  98. else
  99. {
  100.  
  101. strOut[i] = "NO";
  102. }
  103.  
  104. }
  105.  
  106. else
  107. {
  108. strOut[i] = "NO";
  109. }
  110. }
  111. }
  112.  
  113. }
  114. //输出答案
  115. for (int i = ; i < count; i++)
  116. {
  117. Console.WriteLine(strOut[i]);
  118. }
  119.  
  120. Console.ReadKey();
  121. }
  122. }
  123. }

PAT 1003.我要通过1的更多相关文章

  1. PAT 1003我要通过!

    PAT 1003 我要通过! 答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件,系统就输出&qu ...

  2. PAT 1003 我要通过!(20)(代码+思路)

    1003 我要通过!(20)(20 分)提问 "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于PAT的"答案正确"大派送 -- 只要读入的字符串满足下 ...

  3. 迪杰斯特拉算法——PAT 1003

    本文主要是将我对于我对于迪杰斯特拉算法的理解写出来,同时通过例题来希望能够加深对于算法的理解,其中有错误的地方希望大家指正. 迪杰斯特拉算法 我将这个算法理解成一个局部到整体的算法,这个方法确实越研究 ...

  4. PAT 1003. 我要通过!(20) JAVA

    参考http://blog.csdn.net/bin8632/article/details/50216297 答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于PAT的"答 ...

  5. PAT 1003. 我要通过!(20)

    "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于PAT的"答案正确"大派送 -- 只要读入的字符串满足下列条件,系统就输出"答案正确&quo ...

  6. PAT 1003

    1003. Emergency (25) As an emergency rescue team leader of a city, you are given a special map of yo ...

  7. PAT 1003. Emergency (25)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  8. 浙大 pat 1003 题解

    1003. Emergency (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  9. PAT 1003. Emergency (25) dij+增加点权数组和最短路径个数数组

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  10. PAT 1003 我要通过!

    https://pintia.cn/problem-sets/994805260223102976/problems/994805323154440192 “答案正确”是自动判题系统给出的最令人欢喜的 ...

随机推荐

  1. 红队(red team)

    红队资源相关 https://threatexpress.com/redteaming/resources/ 红队相关技术 https://github.com/bluscreenofjeff/Red ...

  2. 关于keildownload键变为灰色不能使用的问题

    有时候  有些朋友可能会遇到这样的问题 突然间download键变成灰色,导致不能将程序下载到芯片中 遇到中问题如果不是软件卡了  那就是可能一不小心点错了,关掉了下载条件“约定” 可以点“魔术棒” ...

  3. mysql数据库之联表查询

    表准备: 这次我们用到5张表: class表: student表: score表: course表: teacher表: 表结构模型: 我们针对以下需求分析联表查询: 1.查询所有的课程的名称以及对应 ...

  4. python之函数形参、实参、可变长参数整体使用和分类

    形参与实参 '''def fn(形参们): pass fn(实参们)'''# 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表 ...

  5. JDK1.8 新特性(全)

    原文链接:https://blog.csdn.net/qq_29411737/article/details/80835658

  6. Redis-数据结构与对象-对象

    1. 作用 Redis使用对象作为五种不同类型的底层实现,字符串,列表,哈希,集合,有序集合等 而对象是基于之前的分析的数据结构创建的.每个对象都至少用到一种数据结构,这意味着,Redis五大类型,底 ...

  7. Linux磁盘挂载、分区、扩容操作

    本文最早发布于 Rootrl's blog 注:以下操作系统环境为CentOS7 基本概念 在操作前,首先要了解一些基本概念 磁盘 在Linux系统中所有的设备都会以文件的形式存储.设备一般保存在/d ...

  8. 03docker镜像

    docker的镜像操作 Union文件系统是Docker镜像的基础. UnionFS(联合文件系统):Union文件系统是一种分层,轻量级并且高性能的文件系统.它支持对文件系统的修改作为一次提交来一层 ...

  9. 树莓派安装使用RXTX

    在RaspberryPi树莓派上使用RXTX(RXTX的源码安装)Linux 编译RXTX(JAVA串口开发)源码 如果为windows系统,则使用rxtx比较简单,到http://fizzed.co ...

  10. Winform 5种皮肤小结(内含丰富的下载实例)

    软件界面就是指软件中面向操作者而专门设计的用于操作使用及反馈信息的指令部分. 优秀的软件界面有简便易用,突出重点,容错高等特点. 1.东日IrisSkin  使用IrisSkin只能是对单一的控件重绘 ...