#include <iostream>
using namespace std;
char* cache;
int sum = 0,sum_add = 0,index = 0;
int A=0;
int* DTC_T,T_i = 0,T_l = 0;
int* DTC_P,P_i = 0,P_l = 0;
int main()
{
//INPUT
DTC_T = new int[100005];
DTC_P = new int[100005];
cache = new char[100005];
cin >> cache;
//FIND FIRST 'P' BEACON
while(cache[index] != 0)
{
if(cache[index] == 'P')break;
index++;
}
index++;
//DTC QUE
while(cache[index] != 0)
{
if(cache[index] == 'T')
{
DTC_T[T_i] = A;
sum += A;
T_i++;
}
if(cache[index] == 'P')
{
DTC_P[P_i] = A;
P_i++;
}
if(cache[index] == 'A')A++;
index++;
}
sum_add = sum;
if(T_i > 0 && P_i > 0)
while(1)
{
if(DTC_T[T_l] > DTC_P[P_l])
{
sum += (sum_add - (DTC_P[P_l] * (T_i - T_l))) % 1000000007;
if(sum > 1000000007)sum %= 1000000007;
if(P_l >= P_i-1)break;
else P_l++;
}
else
{
if(T_l >= T_i-1)break;
else
{
sum_add -= DTC_T[T_l];
T_l++;
}
}
}
cout << (sum % 1000000007) << endl;
return 0;
}
PAT[Basic Level] #1040
最新推荐文章于 2024-06-19 14:25:46 发布