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;
}
posted @ 2022-08-10 01:41  Fare-Well  阅读(26)  评论(0)    收藏  举报