PAT (Basic Level) Practise - 我要通过!
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于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
解题思路:
第二条和第三条规则总结出来就是: P之前的A数目乘以P与T之间的A的数目等于P后面的A的数目。
对于第2个规则:x*1=x。对于第3个规则:aPbTc如果正确,那么b一定是A、a=c,bA就是AA,a*2=aa=ca。
C/C++版代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
char c[];
int count_P, count_T, count_A, pos_T, pos_P;
scanf("%d", &n);
getchar(); //接收换行符,或者将上句话写成这样 scanf("%d\n", &n); for(; n--; )
{
gets(c);
count_P = count_A = count_T = ;
pos_P = pos_T = ;
for(int i=; i<strlen(c); i++)
{
if(c[i] == 'P')
{
count_P++;
pos_P = i;
continue;
}
if(c[i] == 'A')
{
count_A++;
continue;
}
if(c[i] == 'T')
{
count_T++;
pos_T = i;
continue;
}
} if(count_A+count_P+count_T!=strlen(c) || count_P!= ||count_T!= ||
pos_T<=pos_P+ || pos_P*(pos_T-pos_P-)!=strlen(c)-pos_T-)
printf("NO\n");
else
printf("YES\n");
}
return ;
}
解释一下代码中if语句的结果判定条件:
count_A+count_P+count_T!=strlen(c) 显然这是为了满足第一条规则
count_P!=1
count_T!=1 我们可以从题目中看出P和T仅出现一次
pos_T<=pos_P+1 这个条件是为了满足第二条规则, 保证T一定在P后面,且它们中间至少有一个A,,其他任意
pos_P*(pos_T-pos_P-1)!=strlen(c)-pos_T-1) 这是为了满足第三条规则,P之前的A数目乘以P与T之间的A的数目等于P后面的A的数目,看不懂的话自己举个例子就可以推出来了 题目链接:https://www.patest.cn/contests/pat-b-practise/1003
参考链接:http://blog.csdn.net/acm_ted/article/details/19835069
http://blog.csdn.net/wyxdexyq/article/details/23255135
PAT (Basic Level) Practise - 我要通过!的更多相关文章
- PAT (Basic Level) Practise (中文)-1039. 到底买不买(20)
PAT (Basic Level) Practise (中文)-1039. 到底买不买(20) http://www.patest.cn/contests/pat-b-practise/1039 小红 ...
- PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20)
PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20) http://www.patest.cn/contests/pat-b-practise/1 ...
- PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)
PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/1024 ...
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
PAT (Basic Level) Practise (中文)-1025. 反转链表 (25) http://www.patest.cn/contests/pat-b-practise/1025 ...
- PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15)
PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15) http://www.patest.cn/contests/pat-b-practise/10 ...
- PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20)
PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20) http://www.patest.cn/contests/pat-b-practise/1027 本题 ...
- PAT (Basic Level) Practise (中文)-1028. 人口普查(20)
PAT (Basic Level) Practise (中文)-1028. 人口普查(20) http://www.patest.cn/contests/pat-b-practise/1028 某 ...
- PAT (Basic Level) Practise (中文)-1029. 旧键盘(20)
PAT (Basic Level) Practise (中文)-1029. 旧键盘(20) http://www.patest.cn/contests/pat-b-practise/1029 旧键盘上 ...
- PAT (Basic Level) Practise (中文)-1030. 完美数列(25)
PAT (Basic Level) Practise (中文)-1030. 完美数列(25) http://www.patest.cn/contests/pat-b-practise/1030 给 ...
- PAT (Basic Level) Practise (中文)-1031. 查验身份证(15)
PAT (Basic Level) Practise (中文)-1031. 查验身份证(15) http://www.patest.cn/contests/pat-b-practise/1031 一个 ...
随机推荐
- 时间日期date/cal
命令: date 作用: 查看下系统时间 使用: date 命令: cal 对应英文: calendar 作用: 查看日历 选项: -y:可查看一年的日历 使用: cal cal -y
- 公历和农历转换的JS代码(车)
<!-- function CalConv(M) { FIRSTYEAR = 1936; LASTYEAR = 2031; LunarCal = [ new tagLunarCal(23, 3, ...
- Oracle Blob查询和插入
注:本文来源于<Oracle Blob查询和插入> 插入 UPDATE cmm05 SET OUTFILE = to_blob('12345690'): 查询: SELECT utl_ra ...
- Confluence 6 数据库整合有关你数据库的大小写敏感问题
'Collation' 是数据如何被存储和比较的规则.大小写是否敏感是有关字符集设置的一个方面.其他大小写敏感的方面有 kana (Japanese script)和宽度(单字节对比双字节长度). 设 ...
- leetcode(js)算法之914卡牌分组
给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 X > ...
- python面试30-40题
1.简述python引用计数机制 python垃圾回收主要以引用计数为主,标记-清除和分代清除为辅的机制,其中标记-清除和分代回收主要是为了处理循环引用的难题. 引用计数算法 当有1个变量保存了对 ...
- Hive shell 基本命令
首先连接 hive shell 直接输入 hive启动, 使用--开头的字符串来表示注释 hive>quit; --退出hive hive> exit; --exit会影响之前的使用,所以 ...
- 【rabbitmq】安装卸载
安装: 1. 在http://www.rabbitmq.com/install-rpm.html下载对应系统的rpm包 我下载的是rabbitmq-server-3.6.6-1.el6.noarch ...
- medir设置
setting中 MEDIA_URL="/media/"MEDIA_ROOT=os.path.join(BASE_DIR, "app01","medi ...
- MySQL5.7.20安装过程报错CMake Error at cmake/boost.cmake:81 (MESSAGE):
MySQL在5.7版本及以后,都需要boots 库,所以需要先安装boots 步骤: 1.在/usr/local下创建 名为boots的目录 mkdir -p /usr/local/boots 2.进 ...