PAT A1093-カウントPATさん
タイトル
文字列がAPPAPT
2含まれていPAT
たサブストリングとしてのを。最初のものは、第2、第4、及び第6文字で構成され、2つ目は第3、第4、及び第6文字で構成されています。
今、任意の文字列を与え、あなたは多くの言うことになっているPAT
文字列に含まれているのを。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。それぞれの場合のために、そこだけを含むこれ以上105文字以下の文字列を与える唯一のラインがあるP
、A
またはT
。
出力仕様:
各テストケースのために、一列に多数の印刷PAT
「の文字列に含まれる複数可。結果は膨大な数とすることができるので、あなただけの出力に十億七によってモード化の結果を持っています。
サンプル入力:
APPAPT
サンプル出力:
2
PATの数は、最後の文に特別な注意を払う旨の文字列の数出力に結果が十億七によってモード化されています最初に私は無視し、その結果は長い間、間違った、不注意を探して、%十億七ではありません。
問題解決のためのアイデア
A
固定小数点、決定A
左P
数、及びA
Tの右側の桁を、それは、1つのに、決定することができるA
位置に結合することができるPAT
文字列の数。
コード
#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
char c[1000001];
scanf("%s", c);
unsigned int res = 0, len, P = 0, T = 0;
len = (unsigned int)strlen(c);
for(int i = 0; i < len; i++){
if(c[i] == 'T') T++;
}
for(int i = 0; i < len-1; i++){
if(c[i] != 'A'){
if(c[i] == 'P') P++;
else if (c[i] == 'T') T--;
continue;
}
res = (res + P * T)% 1000000007;
}
printf("%d\n", res);
return 0;
}