2019-01-21-PAT乙级-1003-我要通过

2019-01-21-PAT乙级-1003-我要通过

2019-01-21-PAT乙级-1003-我要通过

原文链接:1003 我要通过!

github代码地址:HibisciDai/OJ-PAT-ACM

2019-01-21-PAT乙级-1003-我要通过

编程描述

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

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

  • 字符串中必须仅有 PAT这三种字符,不可以包含其它字符;
  • 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
  • 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 abc 均或者是空字符串,或者是仅由字母 A 组成的字符串。

现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

辅助描述

1
2
3
4
5
作者: CHEN, Yue
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB

输入格式

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

输出格式

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

输入样例

1
2
3
4
5
6
7
8
9
8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA

输出样例

1
2
3
4
5
6
7
8
YES
YES
YES
YES
NO
NO
NO
NO

算法实现

JAVA(openjdk)

代码

题目一个测试点没有通过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import java.util.Scanner;

public class Main {

public static Scanner sc = new Scanner(System.in);

public static boolean keyzero(String str) {
boolean p = false;
boolean a = false;
boolean t = false;

for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == 'P') {
p = true;
}
if (c == 'A') {
a = true;
}
if (c == 'T') {
t = true;
}
}
if (p && a && t) {
return true;
}
return false;
}

public static boolean keyone(String str) {
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c != 'P' && c != 'A' && c != 'T') {
return false;
} else {
return true;
}
}
return true;
}

public static boolean keytwo(String str) {
int p = str.indexOf('P');
int t = str.indexOf('T');

String pre = str.substring(0, p);
String mid = str.substring(p + 1, t);
String end = str.substring(t + 1, str.length());

if (pre.length() * mid.length() == end.length()) {
return true;
}
return false;
}

public static void main(String[] args) {
int inputInt = sc.nextInt();
String[] inputString = new String[inputInt];

for (int i = 0; i < inputString.length; i++) {
String str = sc.next();
inputString[i] = str;
}

sc.close();

for (int i = 0; i < inputString.length; i++) {
String str = inputString[i];
if (keyzero(str) && keyone(str) && keytwo(str)) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
}

运行结果

1
2
3
4
5
6
7
8
9
状态	分数	题目	编译器	耗时	用户	
部分正确 18 1003 Java (openjdk) 151 ms HibisciDai
测试点 结果 耗时 内存
0 答案正确 151 ms 11352 KB
1 答案正确 120 ms 11172 KB
2 答案错误 122 ms 11368 KB
3 答案正确 124 ms 11264 KB
4 答案正确 124 ms 11516 KB
5 答案正确 120 ms 11348 KB

总结

  • String操作
  • 1
    2
    3
    4
    5
    6
    string[] string.spilt(" ");     //根据空格符进行分割,返回值是string数组
    string string.replaceAll("a", "b"); //将a取代成b
    int string.indexOf(substr); //返回substr在string中第一个index
    string string.subString(fromIndex.endIndex); //返回被截取的字符串
    string string.subString(fromIndex); //从第几位开始往后截取
    char string.charAt(index); //返回第几个字符
  • 题中出现递归条件分析公式

C++

代码

原文链接:1003 我要通过!(20)(20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<cstdio>
#include <bits/stdc++.h>
using namespace std;

void solve() {
int x;
scanf("%d", &x);
getchar();
for (int i = 0; i < x; i++) {
int Aqnum = 0, Aznum = 0, Ahnum = 0;
int P, A, T;
P = A = T = 0; // P A T 的个数
int rp = 1; // 控制 是 P 前 还是 P~T之间 和 T 之后的变量 【1 2 3 前中后】
int cnd = 1; // 若含有其他字符就改为 0
for (char s; s=getchar(), s != '\n';) {
s == 'P' ? P++, rp = 2 : s == 'A' ? A++ : s == 'T' ? T++, rp = 3 : cnd = 0; // 可以使用if来写 其实也就是这个意思。
switch (rp) {
case 1:Aqnum++; break; // 前
case 2:if (s != 'P') Aznum++; break; // 中
case 3:if (s != 'T') Ahnum++; break; // 后
}
}
if (P == 1 && A&&T == 1 && Aqnum*Aznum == Ahnum && cnd) // 只有1个P 只有1个T 并且满足乘法 还满足 没有其他字符的话
printf("YES\n");
else
printf("NO\n");
}
}

int main() {
solve();
return 0;
}

运行结果

1
2
3
4
5
6
7
8
9
状态	分数	题目	编译器	耗时	用户
答案正确 20 1003 C++ (g++) 3 ms HibisciDai
测试点 结果 耗时 内存
0 答案正确 3 ms 380 KB
1 答案正确 3 ms 380 KB
2 答案正确 3 ms 384 KB
3 答案正确 2 ms 512 KB
4 答案正确 2 ms 384 KB
5 答案正确 2 ms 372 KB
文章作者: HibisciDai
文章链接: http://hibiscidai.com/2019/01/21/2019-01-21-PAT乙级-1003-我要通过/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HibisciDai
支付宝打赏
微信打赏