PTA1003 我要通过! (20 分)

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到“答案正确”的条件是:

  1. 字符串中必须仅有 PAT这三种字符,不可以包含其它字符;
  2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
  3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 abc 均或者是空字符串,或者是仅由字母 A 组成的字符串。

现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:

每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (≤10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。

输出格式:

每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES,否则输出 NO

输入样例:

10
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
APT
APATTAA

输出样例:

YES
YES
YES
YES
NO
NO
NO
NO
NO
NO

算法实现:

#include<bits/stdc++.h>
using namespace std;
int main(){
int n,ps=0,ts=0,p,t,i;
cin>>n;
string s;
while(n){
n--,ps=0,ts=0,p=0,t=2;
cin>>s;
int ls = s.length();
for(i=0;i<ls;i++){
if(s[i]=='P'||s[i]=='A'||s[i]=='T'){
//寻找P的位置
if(s[i]=='P'){
ps++;//统计P的个数
p=i;
}
//寻找T的位置
if(s[i]=='T'){
ts++;//统计T的个数
t=i;
}
}else{
cout<<"NO"<<endl;
break;
}
}
if(i==ls){
//T在P之前,T在P紧邻的下一位,P的数量大于1,T的数量大于1都不符合要求
if(t<p||t==(p+1)||ps!=1||ts!=1){
cout<<"NO"<<endl;
}else{
if( (p*(t-1-p)) == (ls-1-t) ){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
}
}
return 0;
}

思路:

​ 其实本题较难懂的是题意,特别是第三点条件,后来看了别人的思路,才明白题目的意思,第三点的意思是:以P和T为界,P之前的A的个数为n1,P和T之间的A的个数为n2,T之后的A的个数为n3,要满足的条件是n1*n2=n3。主要就是这一点比较坑,其他按意思来就行,本题最主要就是确定P和T的位置,当然也要保证P和T的个数有且只有一个且必须为大写,且P必须在T之前,除PAT之外不能再有其他字母。

另:查找P和T所在的位置,其实可以用find()函数查找,但是由于本题还要统计P是否存在多个的情况,所以个人认为直接循环统计也比较方便。以下是find()函数的用法:

string s;
int position_p = s.find('P');//查找字符P所在的位置

最新文章

  1. 使用udev实现显示器的热插拔和usb的自动挂载
  2. oracle 11g RAC public/virtual/SACN/private IP we need to know
  3. Atitit.信息论原理概论attilax总结
  4. Websocket 概述
  5. [转]简单识别 RESTful 接口
  6. Android actionbar 搜索框
  7. 第五弹:VGG
  8. 利用AForge.NET 调用电脑摄像头进行拍照
  9. [js高手之路] vue系列教程 - 实现留言板todolist(3)
  10. Spring源码情操陶冶-AOP之ConfigBeanDefinitionParser解析器
  11. ELK学习总结(3-3)elk的组合查询
  12. 高通 android平台LCD驱动分析
  13. Problem F: 平面上的点——Point类 (VI)
  14. 呼叫转接ECT
  15. Java代码优化,都有哪些常用方法?
  16. 给 vue项目添加ESLint
  17. Asp.net core 学习笔记 ( ViewComponent 组件 )
  18. ThinkPHP5 核心类 Request 远程代码漏洞分析
  19. 定时任务crone表达式demo
  20. laravel上传文件到七牛云存储

热门文章

  1. 初次使用gitee的笔记
  2. 【uni-app】第2节HBuilderX未检测到手机问题(今天终于找到解决办法了,亲测可以)
  3. 双CAN通讯模板
  4. [Oracle19C ASM管理] ASM的网络服务
  5. python使用SAP GUI操作SAP的几个坑
  6. win10家庭版vmwarework启动蓝屏
  7. linux 服务器 重命名
  8. HTML5代码大全
  9. Background Suppression Network for Weakly-supervised Temporal Action Localization概述
  10. js转换文件的size由KB转换为B、MB、GB