PAT 乙级真题 1003.我要通过!
来源:互联网 发布:先导爱知出现集数 编辑:程序博客网 时间:2024/06/05 09:55
1003.我要通过!
答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
- 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
- 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
- 如果 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 ,T 三种字符,扫一遍来判断一下就好了,若不符合条件直接输出NO。 xPATx 是正确的,x 代表空串或者全是A字母的串,注意到前后x是一样的,所以APATA 是对的而AAPATA 是错误的。只要在第一次扫描数组的时候记录下P 和T 的位置,然后判断总长度len−Tindex 是否等于Pindex 就可以了。- 对比两个字符串,可知后者与前者相差中间的大
A 和最后的小a ,实际上可以理解成要去掉一个中间的大A 则需要同时去掉后边的小a ,这里A 指一个字符,而a 指的是在P 前边的字符串。
综上
首先定义一下变量:
Tindex :T 在字符串中的位置Pindex :P 在字符串中的位置,len : 字符串长度
则
即满足条件:
代码
#include <cstdio>#include <cstring>int main() { int n; char str[110]; scanf("%d", &n); while (n--) { int flag = 0, pcount = 0, tcount = 0, pindex = -1, tindex = -1; scanf("%s", str); int len = strlen(str); for (int i = 0; i < len; ++i) { if (str[i] != 'P' && str[i] != 'A' && str[i] != 'T') { flag = 1; break; } if (str[i] == 'P') { pindex = i; pcount++; if (pcount > 1) {flag = 1; break;} //若P的数量大于一个则必定为NO,T下同。 } if (str[i] == 'T') { tindex = i; tcount++; if (tcount > 1) {flag = 1; break;} } } if ( (len - tindex - 1) - (pindex) * (tindex - pindex - 2) != (pindex) || (tindex - pindex - 2 < 0)) {flag = 1;} if (flag)printf("NO\n"); else printf("YES\n"); } return 0;}
2 0
- PAT 乙级真题 1003.我要通过!
- 1003. 我要通过!(20)-浙大PAT乙级真题
- 1003. 我要通过!(20) PAT乙级真题
- PAT乙级题1003.我要通过!
- 【PAT乙级真题及训练集】1003. 我要通过!(20)
- 1003. 我要通过!(20)-浙大PAT乙级真题Java实现
- PAT乙级 1003. 我要通过!
- PAT(乙级) 1003.我要通过
- 浙大PAT乙级 1003. 我要通过!
- PAT-乙级-1003. 我要通过!(20)
- PAT乙级-1003. 我要通过!
- 1003. 我要通过!(20) PAT乙级
- 1003. 我要通过!(20)-PAT乙级
- [PAT-乙级]1003.我要通过!
- PAT乙级 1003. 我要通过!(20)
- PAT乙级1003. 我要通过!(20)
- PAT乙级 1003. 我要通过!(20)
- [PAT乙级]1003. 我要通过!(20)
- 删数问题最简单的动态规划
- Java学习笔记-泛型
- How to add ppa repository on kali linux
- 反引号与$()有没有区别?
- Lua中的模块(module)和包(package)详解
- PAT 乙级真题 1003.我要通过!
- K-means的简单实现
- c++中临时变量不能作为非const的引用参数http://blog.csdn.net/kongying168/article/details/3864756
- Android5.0新特性
- MySQL学习(三)
- 1.Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- 简单Struts2实例(入门级)
- Bootstrap 滚动侦测
- c++第一次上机-2