[PAT解题报告] Count PAT's
我出的题——也是简单题。数PAT的个数。
如果我们知道这个A之前有多少个P,则那些P和这个A一起可以构成这么多个PA。
如果我们知道这个T之前有多少个PA,则那些PA和这个T一起就可以构成这么多个PAT。
所以就是动态统计P, PA, PAT的个数。
遇到P, 则P的个数加1。
遇到A,则PA的个数加P的个数。
遇到T,则PAT的个数加PA的个数。
注意别忘记每次加法后取余数。
代码:
#include <cstdio>
#include <cstring>
#include <string>
#include <cctype>
using namespace std;
char s[100005];
const int M = 1000000007;
int main() {
int p = 0, pa = 0, pat = 0;
scanf("%s",s);
for (int i = 0; s[i]; ++i) {
if (s[i] == 'P') {
if (++p >= M) {
p -= M;
}
}
else if (s[i] == 'A') {
if ((pa += p) >= M) {
pa -= M;
}
}
else if ((pat += pa) >= M) {
pat -= M;
}
}
printf("%d\n", pat);
return 0;
}
原体链接: http://www.patest.cn/contests/pat-a-practise/1093


