1003. 我要通过!(20)

来源:互联网 发布:淘宝模块怎么添加 编辑:程序博客网 时间:2024/05/30 04:28

本题要求:

“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。现在就请你为PAT写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:

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

输出格式:

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

输入样例:

8PATPAATAAPATAAAAPAATAAAAxPATxPTWhateverAPAAATAA

输出样例:

YESYESYESYESNONONONO

解题思路 :

大家都容易在规则3中出错,这里要明白aPbTc正确到底是什么含义,举个例子AAPAATAAAA成立,那么AAPAAATAAAAAA也就成立,既然AAPAAATAAAAAA成立,那么AAPAAAATAAAAAAAA也就成立,以此类推。

代码 :

#include<iostream>#include<string>#include<sstream>#include<algorithm>using namespace std;int main() {    int n;    cin >> n;    for (int i = 0; i < n; i++) {        char str[1001];        bool isYes = true;        cin >> str;        int p = -1, t = -1;        int leftA = 0,centerA = 0,rightA = 0;        for (int i = 0; str[i] != '\0'; i++) {            if (str[i] == 'P') {                if (p != -1) {                    isYes = false;                    break;                }                p = i;            } else if (str[i] == 'T') {                if (t != -1) {                    isYes = false;                    break;                }                t = i;            } else if (str[i] == 'A') {                if (p == -1) {                    leftA++;                } else if (t == -1) {                    centerA++;                } else {                    rightA++;                }            }else {                isYes = false;                break;            }        }        if (p == -1 || t == -1) {            isYes = false;        } else if (centerA == 0) {            isYes = false;           }        if (isYes) {            if (rightA == leftA && centerA == 1) {                cout << "YES" << endl;            } else {                int a = leftA;                int b = centerA;                int c = rightA - leftA * (b - 1);                if (a == c) {                    cout << "YES" << endl;                } else {                    cout << "NO" << endl;                }            }        } else {            cout << "NO" << endl;        }    }    return 0;}
0 0
原创粉丝点击