4.7その他の効率的な手法とアルゴリズム:A1093 PATのカウント

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;
}

 

公開された157元の記事 ウォン称賛15 ビュー10000 +

おすすめ

転載: blog.csdn.net/nanke_4869/article/details/104626795