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 一个 ...
随机推荐
- 面向对象(metaclass继承高级用法)
方法一:# class MyType(type):# def __init__(self,*args,**kwargs):# print('132')# super(MyType,self).__in ...
- 【进阶4-2期】Object.assign 原理及其实现 (转)
这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://github.com/yygmind/blog/issues/26 浅拷贝 Object.assign 上篇文章介绍了其定义和使 ...
- vue v-show绑定
在Vue中使用v-show指令来选择性的显示内容.它的属性值可以是布尔值.属性名称以及函数名称.如果使用函数来控制的话,无论函数内容如何运算判断,最终返回布尔值true或者false就可以了 < ...
- Confluence 6 用户目录图例 - 使用 LDAP 授权的内部目录
上面的图:Confluence 连接 LDAP 服务器仅用做授权 https://www.cwiki.us/display/CONFLUENCEWIKI/Diagrams+of+Possible+Co ...
- 基于vue-cli3的vue项目移动端样式适配,lib-flexible和postcss-px2rem
1,安装 flexible和 postcss-px2rem(命令行安装) npm install lib-flexible --save npm install postcss-px2rem --sa ...
- 用json获取拉钩网的信息
class LaoGo(object): def __init__(self): self.url="http://www.lagou.com/lbs/getAllCitySearchLab ...
- centos忘记密码
1.启动时按上下箭头,然后按e进入进入编辑模式 2.上下箭头切换在选择 linux ...这行在末尾输入 LANG=en_US.UTF-8 init=/bin/sh 然后按 ctrl+x 进行引导 3 ...
- css之操作属性
1.文本 1.文本颜色:color 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000 一个RGB值 - 如: RGB(255,0,0) 颜色的名称 ...
- C++标准库和标准模板库(转)
转自原文http://blog.csdn.net/sxhelijian/article/details/7552499 C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标 ...
- LeetCode(67):二进制求和
Easy! 题目描述: 给定两个二进制字符串,返回它们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = " ...