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所在的位置

PTA1003 我要通过! (20 分)的更多相关文章

  1. 抛弃EF,20分构建一个属于自己的ORM框架

    Poiuyt_cyc 博客园首页新随笔联系订阅管理随笔 - 11  文章 - 0  评论 - 111 抛弃EF,20分构建一个属于自己的ORM框架 相信EF大家都不陌生了,因为数据库表跟程序实体是一一 ...

  2. PTA 邻接表存储图的广度优先遍历(20 分)

    6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...

  3. #020PAT 没整明白的题L1-009 N个数求和 (20 分)

    后面的测试点过不去,两个错误一个超时. 目前未解决   L1-009 N个数求和 (20 分)   本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和 ...

  4. L1-023 输出GPLT (20 分)

    L1-023 输出GPLT (20 分) 给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符.当然,四种字符(不区 ...

  5. PAT 乙级 1074 宇宙无敌加法器 (20 分)

    1074 宇宙无敌加法器 (20 分) 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”.每 ...

  6. PAT 乙级 1044 火星数字 (20 分)

    1044 火星数字 (20 分) 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, j ...

  7. PAT 甲级 1035 Password (20 分)

    1035 Password (20 分) To prepare for PAT, the judge sometimes has to generate random passwords for th ...

  8. 获取数值型数组中大于60的元素个数,给数值型数组中不足60分的加20分。(数组,for循环,if条件判断语句)

    package com.Summer_0420.cn; /** * @author Summer * 获取数值型数组中大于60的元素个数 * 给数值型数组中不足60分的加20分 */ public c ...

  9. PAT 甲级 1041 Be Unique (20 分)

    1041 Be Unique (20 分) Being unique is so important to people on Mars that even their lottery is desi ...

  10. PAT 甲级 1054 The Dominant Color (20 分)

    1054 The Dominant Color (20 分) Behind the scenes in the computer's memory, color is always talked ab ...

随机推荐

  1. 算子groupByKey和reduceByKey的区别

    groupByKey根据k对v进行分组,如果要实现wordCount,需要再使用一个聚合算子,例如mapValues reduceByKey有聚合功能,最重要的是在shuffle过程之前可以对分区内相 ...

  2. Typora以及Markdown学习

    Typora以及Markdown学习 标题 n级标题 一级标题为#+[空格]+标题或者ctrl+1 二级标题则为``##+[空格]+标题`或者ctrl+2 后续几级标题依此类推... 最多支持6级标题 ...

  3. SpringMVC文件上传详解

    声明 源码基于Spring Boot 2.3.12.RELEASE.Spring Framework 5.2.15.RELEASE Servlet3.0 文件上传 Servlet 3.0对于HttpS ...

  4. CTF Show web入门 1——20(信息收集)wp和一些感想

    web1 信息搜集 此题为 [从0开始学web]系列第一题 此系列题目从最基础开始,题目遵循循序渐进的原则 希望对学习CTF WEB的同学有所帮助. 开发注释未及时删除 此题有以上备注,可以想到备注未 ...

  5. crontab计划运行shell脚本,调用ncl执行失败

    编写了bash脚本,调用ncl脚本绘图,在前台运行时候无误,但是加入crontab任务就是始终无法出图,并且无错误输出. 经过搜索,问题得到解决.是环境变量的问题.所有执行的命令,和文件都要指定完整的 ...

  6. 网络很慢mtu设置

    [root@db-***** etc]# cat /etc/rc.local #!/bin/sh # # This script will be executed *after* all the ot ...

  7. EasyUI异步Tree默认请求id获取不到问题

    在做淘淘商城项目过程中,在新增商品-选择类目时,使用EasyUI的异步Tree功能,根据视频教程封装了一个common pojo--EUTreeNode对象,属性值取parentId(id).text ...

  8. linux 安装 vsftpd ftp 服务端

    安装 yum install vsftpd 修改:/etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES write_enable=Y ...

  9. linux-添加磁盘-MBR分区-挂载

    [root@localhost ~]# lsblk 查看当前磁盘 [root@localhost ~]# fdisk /dev/sdb 磁盘分区 所有的硬件都在/dev下面存放 欢迎使用 fdisk ...

  10. vmware 二次虚拟化

    在创建的虚拟机的目录内找到扩展名为vmx的文件,在文件的最后添加  hypervisor.cpuid.v0 = "FALSE" 保存 重新打开虚拟机在 在虚拟机配置开启虚拟化