PAT 乙级 1040 有几个PAT
要看字符串中一共有多少PAT,重点是看我们遇到一个A时,它左边有几个P,右边有几个T,排列组合即可知道,以A为中心的PAT数量等于 左边P的数量*右边T的数量
把遇到每个A计算的结果求和,就得到结果
左边P的数量:遍历时,遇到p就countp++
右边T的数量:先遍历一遍得到countt,第二次遍历时,每遇到T就countt–,因为遇到A时,不会再看其左边T的数量。
// 1040 有几个PAT.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
int main()
{
string s;
int result = 0, countt = 0, countp = 0;
cin >> s;
for (int i = 0; i < s.length(); i++) {
if (s[i] == 'T') countt++;
}
for (int i = 0; i < s.length(); i++) {
if (s[i] == 'P') countp++;
if (s[i] == 'T') countt--;
if (s[i] == 'A') result = (result + (countp * countt) % 1000000007) % 1000000007;
}
cout << result;
return 0;
}