题目
字符串 APPAPT
中包含了两个单词 PAT
,其中第一个 PAT
是第 2 位( P
),第 4 位( A
),第 6 位( T
);第二个 PAT
是第 3 位( P
),第 4 位( A
),第 6 位( T
)。
现给定字符串,问一共可以形成多少个 PAT
?
输入格式:
输入只有一行,包含一个字符串,长度不超过 1 0 5 10^5 1 0 ? 5 ? ? ,只包含 P
、 A
、 T
三种字母。
输出格式:
在一行中输出给定字符串中包含多少个 PAT
。由于结果可能比较大,只输出对 1000000007 取余数的结果。
输入样例:
APPAPT
输出样例:
2
代码
#include<iostream>
using namespace std;
int main()
{
long long cal = 0;
long long *p=new long long[100000], * a = new long long[100000], * t = new long long[100000], i = 0;
string in="";
cin >> in;
for (i = 0; i < 100000; i++)
{
p[i] = 0;
a[i] = 0;
t[i] = 0;
}
i = 0;
while (in[i++] != '\0')
if (in[i - 1] == 'P')
p[i-1]++;
else if(in[i - 1] == 'A')
a[i-1]++;
else if(in[i - 1] == 'T')
t[i-1]++;
for (i = 99998; i >= 0; i--)
t[i] += t[i + 1];
for (i = 0; i < 100000; i++)
a[i] *= t[i];
for (i = 99998; i >= 0; i--)
a[i] += a[i + 1];
for (i = 0; i < 100000; i++)
if (p[i] != 0)
cal += p[i] *a[i];
cout << cal % 1000000007;
return 0;
}