*PTA(Basic Level) 1003
Posted stray-yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了*PTA(Basic Level) 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
分析:
三种条件翻译一下:
1、字符串中仅有P,T,A三种字符
2、PAT;可在PAT前后加上相同数量的A
3、字符串为aPbTc形式(a,b,c为空或者不同数目A组成的字符串),每在P,T之间加一个A,在字符串结尾加上a,变成aPbATca。
这三种条件不是独立的。
1是基本条件,再根据条件2可以写出PAT、APATA, AAPATAA……这样的字符串,再根据条件3得到PAA..T, APAATAA, AAPAATAAA。
综合2、3,a,b,c中A的个数满足关系 len(a) * len(b) = len(c)。
https://blog.csdn.net/he_yang_/article/details/91798477这篇博客里有递推过程。
#include<iostream> #include<string> using namespace std; void solve(string s) { int num_of_P=0;//记录P的个数 int locate_of_T=0; int num_of_T=0; int locate_of_T=0; int other=0;//记录非法字符 int l=s.length(); for(int i=0;i<l;i++) { if(s[i]==‘P‘){ num_of_P++; locate_of_P=i; } else if(s[i]==‘T‘){ num_of_T++; locate_of_T=i; } else if(s[i]!=‘A‘) other++; } if(num_of_P !=1||num_of_T!=1||other||local_of_T-local_of_P<=1){ cout<<"NO"<<endl; // 有多个P,多个T,非法字符,以及P和T之间无A的情况 } else if((local_of_P)*(local_of_T-local_of_P-1)==(input.length()-local_of_T-1) ){ cout<<"YES"<<endl; // 考虑了上述几种特殊情况之后再来考虑正常情况 } else{ cout<<"NO"<<endl; // A的数量不满足要求的情况 } } int main(){ int n; cin>>n; string inputStr; for(int i=0;i<n;i++) { cin>>inputStr; } Solve(inputStr); return 0; }
代码参考:https://blog.csdn.net/weixin_39059031/article/details/106040749
以上是关于*PTA(Basic Level) 1003的主要内容,如果未能解决你的问题,请参考以下文章
JAVA1003 我要通过!(20分) PAT乙级 PAT (Basic Level)Practice (中文)