A1093カウントPATさん
文字列が APPAPT
2含まれてい PAT
たサブストリングとしてのを。最初のものは、第2、第4、及び第6文字で構成され、2つ目は第3、第4、及び第6文字で構成されています。
今、任意の文字列を与え、あなたは多くの言うことになっている PAT
文字列に含まれているのを。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各場合について、のみを含むせいぜい10 5文字の文字列を与える唯一のラインがある P
、 A
、または T
。
出力仕様:
各テストケースのために、一列に多数の印刷 PAT
「の文字列に含まれる複数可。結果は膨大な数とすることができるので、あなただけの出力に十億七によってモード化の結果を持っています。
サンプル入力:
APPAPT
サンプル出力:
2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=100010;
const int MOD=1000000007;
char str[maxn];
int leftNumP[maxn]={0};
int main(){
gets(str);
int len=strlen(str);
for(int i=0;i<len;i++){
if(i>0)
leftNumP[i]=leftNumP[i-1];
if(str[i]=='P')
leftNumP[i]++;
}
int ans=0,rightNumT=0;
for(int i=len-1;i>=0;i--){
if(str[i]=='T')
rightNumT++;
else if(str[i]=='A')
ans=(ans+leftNumP[i]*rightNumT)%MOD;
}
printf("%d\n",ans);
return 0;
}