/*
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:规则制约法
复杂度:O(n)
方法2:递归
O(n^2)
*/
#include<stdio.h>
#include <string.h>
using namespace std; const int MAX_LENGTH = 100; //判断是否满足条件1:1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
bool isPATChars(char chs[], int len){
for(int i=0;i<len;i++){
if(chs[i] != 'P' && chs[i] != 'A' && chs[i] != 'T')
return 0;
}
return 1;
} bool isPAT(char chs[], int len){
if(len < 3)
return false;
int p_flag=-1;//标记P位置
int t_flag=-1;//标记T位置
int a_count=0; //统计中间a的个数:若中间a的个数为1-2个,正确;反之,不正确
for(int i=0;i<len;i++){
if(chs[i] == 'A'){
if(p_flag != -1){
if(t_flag == -1){
a_count++;
}
}
} else if(chs[i] == 'P'){
if(p_flag == -1){//说明:找到第1个字符'P'
p_flag = i;
} else {//说明有超过1个字符'P'了
return false;
} } else {//当前元素为 'T'
if(t_flag == -1){//说明:找到第1个字符'T'
if(p_flag == -1){ //说明: 此时出现的'T'比'P'先出现,错误情况
return false;
}
t_flag = i; //出现的第一个在'P'后面的 ‘T’
} else {//说明有超过1个字符'T'了
return false;
} if(p_flag != -1){//说明:'P'在'T'之前出现了,正确情况
if(p_flag == i - 1){ //说明:'P'与'T'紧贴着,中间没有'A' 错误情况
return false;
}
} else {//说明:'P'在'T'之前出现了,错误情况
return false;
}
}
} if(p_flag == -1 || t_flag == -1 || a_count>2 || a_count<1)//保证PAT均有出现
return false;
return true;
} int main(){
int size;
char chs_arr[10][MAX_LENGTH]; scanf("%d", &size); for(int i=0;i<size;i++){
scanf("%s", (chs_arr+i));
} for(int i=0;i<size;i++){
//scanf("%s", (chs_arr+i));
//printf("%d", strlen(chs_arr[i]));
if(isPATChars(chs_arr[i], strlen(chs_arr[i]))){
if(isPAT(chs_arr[i], strlen(chs_arr[i]))){
printf("YES\n");
} else {
printf("NO\n");
}
} else {
printf("NO\n");
}
}
return 0;
}

  

最新文章

  1. python脚本后台运行
  2. poi2015 bzoj4377-4386训练
  3. Python 对目录中的文件进行批量转码(GBK&gt;UTF8)
  4. C#遍历字典
  5. 其他浏览器(firefox,chrome)可以上网 ie(Internet Explorer)无法上网 解决方法
  6. jsp与Servlet
  7. svn自动更新
  8. c 深度剖析 3
  9. aaalogo写入中文出错的解决方法
  10. 一、UITableView的属性
  11. itext poi 学习之旅 (2)创建excel
  12. 奇怪的问题:android:focusable和android:clickable造成ListView的点击不了
  13. 操作3 mongodb和mysql 开启慢查询日志 ,以及mongodb从配置文件启动
  14. javascript立即调用的函数表达式N种写法(第二篇)
  15. word自动备份,word误删内容恢复
  16. 详解EBS接口开发之采购申请导入
  17. BZOJ_4238_电压_树上差分+dfs树
  18. ctrl+shift+r / ctrl+f5 强制(不使用缓存)刷新google chrome网页
  19. [工具开发] 分享两个基于Heapster 和 Influxdb 的 Grafana 监控仪表盘模板
  20. 一文总结 Linux 虚拟网络设备 eth, tap/tun, veth-pair

热门文章

  1. 【模板】ac自动机
  2. 第三十四篇-Palette(调色板)的使用
  3. 斯坦福大学公开课机器学习:advice for applying machine learning | diagnosing bias vs. variance(机器学习:诊断偏差和方差问题)
  4. CentOS 7 输入中文 &amp; 安装搜狗输入法
  5. asp.net 获得伪静态网址解决微信sdk签名问题
  6. 1.1实战项目:电影周周看V1(初识小程序)
  7. 2019年 十款Mac上必备的实用软件列表
  8. MHA环境搭建
  9. springboot入门使用
  10. http-request详解