1040 有几个PAT——25分
字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T);第二个PAT是第3位(P),第4位(A),第6位(T)。现给定字符串,问一共可以形成多少个PAT?
输入格式
输入只有一行,包含一个字符串,长度不超过105,只包含P、A、T三种字母。
输出格式
在一行中输出给定字符串中包含多少个PAT。由于结果可能比较大,只输出对1000000007取余数的结果。
输入样例
APPAPT
输出样例
2
| 代码长度限制 | 时间限制 ||内存限制 |
|16 KB | 150 ms | 64 MB |
思路:
①这道题属于找规律的题目
②对于每个A,它前面的P的个数和后面的T的个数的乘积就是当前可构成PAT的数目
③我们遍历整个字符串,把每个A可以构成的PAT累加就可以得到结果了
④别忘了对1000000007 取余数
代码:
#include<bits/stdtr1c++.h>
using namespace std;
int main() {
string s;
getline(cin, s);
int sum = 0, cnt_p = 0, cnt_t = 0;
for (auto x : s) {
if (x == 'T') cnt_t++; //计算出所有T的个数
}
for (auto y : s) {
if (y == 'P') cnt_p++; //计算前面P的个数直接累计就行
if (y == 'T') cnt_t--; //计算后面的T的个数就用所有的T的个数减掉前面出现过的T的个数就行了,前面每出现一个就减一
if (y == 'A') sum = (sum + cnt_p * cnt_t ) % 1000000007;
}
cout << sum;
return 0;
}