码迷,mamicode.com
首页 > 其他好文 > 详细

*PTA(Basic Level) 1003

时间:2020-07-21 13:56:18      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:The   正整数   asi   black   测试用例   void   裁判   weixin   超过   

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

标签:The   正整数   asi   black   测试用例   void   裁判   weixin   超过   

原文地址:https://www.cnblogs.com/stray-yang/p/13047419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!