PAT甲级 1093 Count PAT's (25 分)

\quad 这是一个数学问题,容易想到对于字符串中每个A而言,若其前面有m个P,后面有n个T,可以得到对于当前的A,能够组成m*n种情况的PAT。我们可以先统计出T的总个数,依次遍历字符串,遇到P则统计P的个数++,遇到T则T个数--,遇到A则令结果加上当前P数量和T数量的乘积。最后将结果模给定的数输出即可。这里若数太大在中间计算过程中就爆long long的话可以每一步都模那个大数,不过PAT数据向来比较亲民,这个题不用考虑这种情况。程序如下:

#include <bits/stdc++.h>
using namespace std;

int main(int argc, char const *argv[])
{
	string s;
	cin >> s;
	int T = 0, P = 0;
	for (int i = 0; i < s.length(); ++i)
	{
		if(s[i]=='T') T++;
	}
	long long res = 0;
	for (int i = 0; i < s.length(); ++i)
	{
		if(s[i]=='P') P++;
		if(s[i]=='T') T--;
		if(s[i]=='A') res += P*T;
	}
    cout << res%1000000007 << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40438165/article/details/89851217