题目
1063 Count PAT’s (25)
解题思路
- 1.求出输入字符串
s
的第i个字母左边的P的个数p[i]
和右边的T的个数 t[i] ,然后再遍历s
,如果s[i]=='A'
,那么用这个A能组成p[i] * t[i]
个PAT,最后把所有的相加起来就可以了。 - 2.
sum
可能很大,要用long
型,输出的时候再初一mod
就行了。
代码
#include<iostream>
#include<string>
using namespace std;
int p[100000+5], t[100000+5];
int main(){
string s;
cin>>s;
int total = s.length();
if (s[0]=='P') {
p[0] = 1;
}
else {
p[0] = 0;
}
if (s[total-1] == 'T') {
t[total - 1] = 1;
}
else
t[total - 1] = 0;
for (int var = 1; var < total; ++var) {
p[var] = p[var-1];
if (s[var] == 'P') {
++p[var];
}
t[total - 1 - var] = t[total - var];
if (s[total - 1 - var] == 'T') {
++t[total - 1 - var];
}
}
long sum = 0;
for (int i = 0; i < total; ++i) {
if (s[i] == 'A') {
sum += p[i]*t[i];
}
}
cout << sum % 1000000007 << endl;
return 0;
}