小标
2018-08-27
来源 :
阅读 1705
评论 0
摘要:本文主要向大家介绍了C/C++知识点之C++ PAT乙级1003,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之C++ PAT乙级1003,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
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 }
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
喜欢 | 1
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号