转载:https://www.liuchuo.net/
Notice
1.每次扫描到A,用这个A组成的PAT刚好是A前面的P数量*A后面T的数量.
2.因为整型的输出范围是0~2147483648.countp*countt有可能溢出,所以需要对成绩2取模,
每次结果的和也有可能溢出,所以需对每次结果和取模,总之取两次模的目的在于防止数据溢出。
#include <iostream>
using namespace std;
int main(){
string s;
cin >> s;
int sum = 0,cntp= 0,cntt = 0;
for(int i = 0;i < s.length();i++){
if(s[i] == 'T')
cntt++;
}
for(int i = 0;i < s.length();i++){
if(s[i] == 'P')cntp++;
if(s[i] == 'T')cntt--;
if(s[i] == 'A')
sum = (sum + (cntp * cntt) % 1000000007) % 1000000007;
}
cout << sum ;
return 0;
}