*PTA(Basic Level) 1003

Posted stray-yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了*PTA(Basic Level) 1003相关的知识,希望对你有一定的参考价值。

1003 我要通过! (20分)
 

答案正确”是自动判题系统给出的最令人欢喜的回复。

本题属于 PAT 的“答案正确”大派送

—— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

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

  1. 字符串中必须仅有 PAT这三种字符,不可以包含其它字符;
  2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
  3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 abc 均或者是空字符串,或者是仅由字母 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的主要内容,如果未能解决你的问题,请参考以下文章

PTA(Basic Level)1036.跟奥巴马一起编程

JAVA1003 我要通过!(20分) PAT乙级 PAT (Basic Level)Practice (中文)

JAVA1003 我要通过!(20分) PAT乙级 PAT (Basic Level)Practice (中文)

PAT(Basic Level)practice1003

PTA(Basic Level) 1002

PTA(Basic Level) 1002