PAT :计算机程序设计能力考试:一个高校编程学习赛,内容基础,据说题目描述含糊不清,造成诸多理解错误。
第一观感是:输入输出样例极少,未给学生充分理解题目,提供更多辅助。
PAT 乙级:只涉及基础编程,最难到排序算法。适合基础语法学习阶段的同学。
问题描述
字符串 APPAPT
中包含了两个单词 PAT
,其中第一个 PAT
是第 2 位§,第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位§,第 4 位(A),第 6 位(T)。
现给定字符串,问一共可以形成多少个 PAT
?
输入格式
输入只有一行,包含一个字符串,长度不超过 105 ,只包含 P、A、T 三种字母。
输出格式
在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。
输入输出样例
输入样例 | 输出样例 |
---|---|
APPAPT | 2 |
PPPATAT | 9 |
样例解释:无
题解 1:TLE
思路分析:三层循环,暴力枚举,超时 TLE
#include<iostream>
using namespace std;
int main() {
string s;
getline(cin, s);
int cnt = 0;
// i 只负责找 'P'
for(int i = 0; i < s.size(); i++) {
if(s[i] != 'P') continue;
// j 负责找 'A'
for(int j = i + 1; j < s.size(); j++) {
if(s[j] != 'A') continue;
// k 负责找 'T'
for(int k = j + 1; k < s.size(); k++) {
if(s[k] == 'T') {
cnt++;
cnt %= 1000000007;
}
}
}
}
cout << cnt << endl;
return 0;
}
题解 2
优化 题解 1 循环,将时间复杂度降到 O ( N 2 ) O(N^2) O(N2)