1040 有几个PAT(25 分)
字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。
现给定字符串,问一共可以形成多少个 PAT?
输入格式:
输入只有一行,包含一个字符串,长度不超过10
5
,只包含 P、A、T 三种字母。
输出格式:
在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。
输入样例:
输出样例:
代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| #include<iostream>
#include<string>
using namespace std;
int main(){
string s;
cin >> s;
int cont=0;
for (int i = 0; i < s.size(); i++){
if (s[i] == 'T') cont++;
}
int p=0, t=cont,res=0;
for (int i = 0; i < s.size(); i++){
if (s[i] == 'P') p++;
if (s[i] == 'T') t--;
//注意此处写法,不能直接用res+=,这样写有两个测试点跑不过
if (s[i] == 'A') res = (res+(p*t) % 1000000007)%1000000007;
}
cout << res;
return 0;
}
|
个人思考:
打表,先算出来T的个数.
之前用res+=这样写,一直有测试点不能ac,逻辑处理问题,改成代码中的样子就好了.