1. /*
  2. 1003. 我要通过!(20)
  3.  
  4. “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
  5.  
  6. 得到“答案正确”的条件是:
  7.  
  8. 1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
  9. 2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
  10. 3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。
  11.  
  12. 现在就请你为PAT写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。
  13. 输入格式: 每个测试输入包含1个测试用例。第1行给出一个自然数n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。
  14.  
  15. 输出格式:每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。
  16.  
  17. 输入样例:
  18. 8
  19. PAT
  20. PAAT
  21. AAPATAA
  22. AAPAATAAAA
  23. xPATx
  24. PT
  25. Whatever
  26. APAAATAA
  27. 输出样例:
  28. YES
  29. YES
  30. YES
  31. YES
  32. NO
  33. NO
  34. NO
  35. NO
  36.  
  37. */
  38. /*
  39. 思路:
  40. 方法1:规则制约法
  41. 复杂度:O(n)
  42. 方法2:递归
  43. O(n^2)
  44. */
  45. #include<stdio.h>
  46. #include <string.h>
  47. using namespace std;
  48.  
  49. const int MAX_LENGTH = 100;
  50.  
  51. //判断是否满足条件1:1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
  52. bool isPATChars(char chs[], int len){
  53. for(int i=0;i<len;i++){
  54. if(chs[i] != 'P' && chs[i] != 'A' && chs[i] != 'T')
  55. return 0;
  56. }
  57. return 1;
  58. }
  59.  
  60. bool isPAT(char chs[], int len){
  61. if(len < 3)
  62. return false;
  63. int p_flag=-1;//标记P位置
  64. int t_flag=-1;//标记T位置
  65. int a_count=0; //统计中间a的个数:若中间a的个数为1-2个,正确;反之,不正确
  66. for(int i=0;i<len;i++){
  67. if(chs[i] == 'A'){
  68. if(p_flag != -1){
  69. if(t_flag == -1){
  70. a_count++;
  71. }
  72. }
  73. } else if(chs[i] == 'P'){
  74. if(p_flag == -1){//说明:找到第1个字符'P'
  75. p_flag = i;
  76. } else {//说明有超过1个字符'P'了
  77. return false;
  78. }
  79.  
  80. } else {//当前元素为 'T'
  81. if(t_flag == -1){//说明:找到第1个字符'T'
  82. if(p_flag == -1){ //说明: 此时出现的'T'比'P'先出现,错误情况
  83. return false;
  84. }
  85. t_flag = i; //出现的第一个在'P'后面的 ‘T’
  86. } else {//说明有超过1个字符'T'了
  87. return false;
  88. }
  89.  
  90. if(p_flag != -1){//说明:'P'在'T'之前出现了,正确情况
  91. if(p_flag == i - 1){ //说明:'P'与'T'紧贴着,中间没有'A' 错误情况
  92. return false;
  93. }
  94. } else {//说明:'P'在'T'之前出现了,错误情况
  95. return false;
  96. }
  97. }
  98. }
  99.  
  100. if(p_flag == -1 || t_flag == -1 || a_count>2 || a_count<1)//保证PAT均有出现
  101. return false;
  102. return true;
  103. }
  104.  
  105. int main(){
  106. int size;
  107. char chs_arr[10][MAX_LENGTH];
  108.  
  109. scanf("%d", &size);
  110.  
  111. for(int i=0;i<size;i++){
  112. scanf("%s", (chs_arr+i));
  113. }
  114.  
  115. for(int i=0;i<size;i++){
  116. //scanf("%s", (chs_arr+i));
  117. //printf("%d", strlen(chs_arr[i]));
  118. if(isPATChars(chs_arr[i], strlen(chs_arr[i]))){
  119. if(isPAT(chs_arr[i], strlen(chs_arr[i]))){
  120. printf("YES\n");
  121. } else {
  122. printf("NO\n");
  123. }
  124. } else {
  125. printf("NO\n");
  126. }
  127. }
  128. return 0;
  129. }

  

[C++]PAT乙级1003. 我要通过!(17/20)的更多相关文章

  1. PAT 乙级 1003 我要通过!(20) C++版

    1003. 我要通过!(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue “答案正确”是自动判题系统给出的最 ...

  2. PAT乙级 1003. 我要通过!(20)

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

  3. PAT 乙级1003. 我要通过!(20)

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

  4. PAT 乙级 1003. 我要通过!(20) (C语言描述)

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

  5. PAT 乙级 1003

    题目 题目地址:PAT 乙级 1003 题解 规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意:总之这道题要考虑的东西更多,细节上也要特别注意: 规律:“如果 aPbTc 是 ...

  6. PAT乙级:1094 谷歌的招聘 (20分)

    PAT乙级:1094 谷歌的招聘 (20分) 题干 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘.内容超级简单,就是一个以 .com 结尾的网址,而前面 ...

  7. PAT乙级:1053 住房空置率 (20分)

    PAT乙级:1053 住房空置率 (20分) 题干 在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给 ...

  8. PAT乙级:1069 微博转发抽奖 (20分)

    PAT乙级:1069 微博转发抽奖 (20分) 题干 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入 ...

  9. PAT乙级:1092 最好吃的月饼 (20分)

    PAT乙级:1092 最好吃的月饼 (20分) 题干 月饼是久负盛名的中国传统糕点之一,自唐朝以来,已经发展出几百品种. 若想评比出一种"最好吃"的月饼,那势必在吃货界引发一场腥风 ...

  10. PAT乙级:1014 福尔摩斯的约会 (20分)

    PAT乙级:1014 福尔摩斯的约会 (20分) 题干 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk ...

随机推荐

  1. MySQL数据库的基本使用简单易懂

    MySQL数据库的基本使用 一.数据库概述 1. 基本介绍 数据库就是以一定格式进行组织的数据的集合.通俗来看数据库就是用户计算机上 一些具有特殊格式的数据文件的集合 2. 数据库的特点 持久化存储 ...

  2. 关于MySQL索引的最左前缀匹配原则原理说明说明

    假设有2个这样的SQL SELECT * FROM table WHERE a = 1 AND c = 3; // c不走索引 SELECT * FROM table WHERE a = 1 AND ...

  3. Counted(内存管理机制)

    class Counted { private: unsigned int count_; public: Counted() : count_() { } virtual ~Counted() { ...

  4. idea 红线 并提示idea cant resolve symbol

    能编译通过说明SDK导入正确,但是为啥我们点击每一个Java文件会出现好多红色的下划线 ,并提示idea cant resolve symbol原因就是可能没有清除原来的历史缓存,导致一些错误,解决方 ...

  5. Linux 多线程 - 线程异步与同步机制

    Linux 多线程 - 线程异步与同步机制 I. 同步机制 线程间的同步机制主要包括三个: 互斥锁:以排他的方式,防止共享资源被并发访问:互斥锁为二元变量, 状态为0-开锁.1-上锁;开锁必须由上锁的 ...

  6. STM32 ------ 串口 数据位长度 和 奇偶校验位

    USART_InitStructure.USART_WordLength 的值是数据位长度+一个奇偶校验位(如果无奇偶校验则不加一)

  7. 关键字(8):数据库记录的增删查改insert,delete,select,update

    insert:一般只要参数个数和类型没问题,不会插入异常 INSERT INTO t_pos_dynamic_map(autoid, lt_termno, lt_merchno) VALUES(SEQ ...

  8. C++: 可变参数;

    可变参数,即参数的个数是动态变化的, 可多可少. 1. 可变参数: 可变参数一般采用”..."表示,用在宏上表示变参宏, 如: #define WriteLine(format,...) p ...

  9. IDEA常用快捷键整理(Mac OS X版本)

    最近eclipse把我弄疯了!各种提示没有!烦,果断用了IDEA. 一.前提 IDEA版本:IntelliJ IDEA 15.0.3 Keymaps:Mac OS X 二.视图切换快捷键 1.cmd ...

  10. 【clustering】之K-means && K-medoids

    k-means k-medoids 一.clustering 中的 loss function 关于聚类的性能评价标准 参考博客 可以为外部指标和内部指标,其中外部指标是指 聚类结果与某个 “参考模型 ...