(乙)1003. 我要通过!
来源:互联网 发布:淘宝上传视频要求 编辑:程序博客网 时间:2024/05/29 18:37
题目:
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。
输入格式: 每个测试输入包含1个测试用例。第1行给出一个自然数n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。
输出格式:每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。
输入样例:8PATPAATAAPATAAAAPAATAAAAxPATxPTWhateverAPAAATAA输出样例:
YESYESYESYESNONONONO
题目说了很多、很长。但是仔细观察后发现,其实合法字符串的条件是:
1、只含有PAT三个字符,且P、T仅有各有一个,A可有一个或多个;
2、T后A的个数与P前A的个数之商等于PT中间A的个数。
由此可以简单写出AC代码:
#include<iostream>using namespace std;bool judge(const string &);int main(){ int n; string str; cin>>n; for(;n--;) { cin>>str; cout<<(judge(str)?"YES":"NO")<<endl; } return 0;}bool judge(const string &str){ const char* cstr = str.c_str(); int lP=-1,lT=-1; for(unsigned int i=0;i<str.length();i++) { if(cstr[i]=='A') continue; if(cstr[i]=='P'&&lP==-1) { lP=i; continue; } if(cstr[i]=='P'&&lP!=-1) return false; if(cstr[i]=='T'&&lT==-1) { lT = i; continue; } if(cstr[i]=='T'&&lT!=-1) return false; return false; } int front = lP,mid = lT-lP-1,back = str.length()-1-lT; if(lP==-1||lT==-1||mid==0) return false; if(front==0&&back==0) return true; if(back%front==0&&back/front==mid) return true; return false;}
0 0
- (乙)1003. 我要通过!
- (PAT乙)1003. 我要通过!
- 1003. 我要通过!
- 1003. 我要通过
- 1003. 我要通过!
- 1003. 我要通过!
- 1003.我要通过
- 1003. 我要通过!
- 1003. 我要通过
- 1003. 我要通过!
- 1003. 我要通过!
- 1003.我要通过
- 1003. 我要通过!
- 1003.我要通过
- 1003. 我要通过!
- 1003. 我要通过!
- 1003. 我要通过!
- 1003.我要通过!
- 状态栏显示进度加载
- kylin jdbc中slf4j版本冲突问题
- win7 VMware CentOS桥接(bridge)模式网络配置
- <s:iterator>的status属性
- 开发笔记
- (乙)1003. 我要通过!
- smote算法
- 【绝对干货来啦】巧用jax-rs之jersey实现不确定数量、多类型文件批量一次上传接口
- android 设置系统的时间
- 报表性能优化方案之善用参数注入
- 解决ListView数据重复问题
- oracle创建表空间
- ListView的动态更新数据
- Restore IP Addresses(DFS的巅峰)