码迷,mamicode.com
首页 > 编程语言 > 详细

PAT-乙级-1003(C++)

时间:2017-07-29 16:37:21      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:bool   完全   输出   长度   div   pac   logs   code   递推   

1003. 我要通过!(20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

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

1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3. 如果 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, A, T这三种字符,不可以包含其它字符;

2.任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;

  这里要注意空字符串不是空格!!!即正确形式为PAT、APATA、AAPATAA等。P之前的A个数与T之后的A个数相等。

3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

  这个要求是相对而言比较有难度的,需要仔细分析,一开始拿到可能完全不理解题意。aPbATca正确的前提是aPbTc正确,那么如何保证aPbTc正确呢?

  根据之前的条件可知,能判断正确的必然只有条件二。即第一次递推时,aPbTc满足条件二,b==‘A‘,a==c;

    递推关系:

        技术分享

 

 

  以此类推我们可以总结出一个关系,T后面A的个数等于P前A的个数乘以P和T之间的A的个数。

  这道题不难但是条件三挺绕的emmm,我是用字符串写的调用的str.length(),网上大部分都是直接用的int去数的,本质是差不多的~

  起初是看到三个功能所以写了三个函数,后来发现函数一是不必要的就注释掉了~

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 bool fun1(string m);
 5 bool fun2(string m);
 6 bool fun3(string m);
 7 int main()
 8 {
 9     int num;
10     cin >> num;
11     string a[10];
12     for (int i = 0; i < num; i++)
13         cin >> a[i];
14     for (int i = 0; i < num; i++)
15     {
16         //bool first = fun1(a[i]);
17         bool second = fun2(a[i]);
18         bool third = fun3(a[i]);
19         if ((/*first&&*/second) || (/*first&&*/third))
20             cout << "YES" << endl;
21         else
22             cout << "NO" << endl;
23     }    
24 }
25 bool fun1(string m)
26 {
27     int n = m.length();
28     for (int j = 0; j < n; j++)
29     {
30         if (m[j] != P && m[j] != A && m[j] != T)
31             return false;
32     }
33     return true;
34 }
35 bool fun2(string m)
36 {
37     int j = 0;
38     string str1, str2, str3;
39     for (; m[j] == A; j++)
40     {
41         str1 += m[j];
42     }
43     if (m[j] != P || m[j + 1] != A || m[j + 2] != T)
44         return false;
45     j += 3;
46     for (; m[j] == A; j++)
47     {
48         str2 += m[j];
49     }
50     if (j != m.length())
51         return false;
52     if (str1 != str2)
53         return false;
54     return true;
55 }
56 bool fun3(string m)
57 {
58     int j = 0;
59     string str1, str2, str3;
60     for (; m[j] == A; j++)
61     {
62         str1 += m[j];
63     }
64     if (m[j] != P)
65         return false;
66     j += 1;
67     for (; m[j] == A; j++)
68     {
69         str2 += m[j];
70     }
71     if (str2 == "")
72         return false;
73     if (m[j] != T)
74         return false;
75     j += 1;
76     for (; m[j] == A; j++)
77     {
78         str3 += m[j];
79     }
80     if (j != m.length())
81         return false;
82     if (str3.length()!=(str1.length()*str2.length()))
83         return false;
84     return true;
85 }

 

 

 

 

PAT-乙级-1003(C++)

标签:bool   完全   输出   长度   div   pac   logs   code   递推   

原文地址:http://www.cnblogs.com/guofeichengzi/p/7256024.html

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