PAT (Advanced Level) 1093. Count PAT's (25)

Posted Fighting Heart

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT (Advanced Level) 1093. Count PAT's (25)相关的知识,希望对你有一定的参考价值。

预处理每个位置之前有多少个P,每个位置之后有多少个T。

对于每个A,贡献的答案是这个A之前的P个数*这个A之后T个数。

#include<cstdio>
#include<cstring>

long long MOD=1e9+7;
const int maxn=1e5+10;

long long dp1[maxn],dp2[maxn];
char s[maxn];

int main()
{
    scanf("%s",s);
    memset(dp1,0,sizeof dp1);
    if(s[0]==P) dp1[0]=1;
    for(int i=1;s[i];i++)
    {
        dp1[i]=dp1[i-1];
        if(s[i]==P) dp1[i]++;
    }
    memset(dp2,0,sizeof dp2);
    int len=strlen(s);
    if(s[len-1]==T) dp2[len-1]=1;
    for(int i=len-2;i>=0;i--)
    {
        dp2[i]=dp2[i+1];
        if(s[i]==T) dp2[i]++;
    }
    long long ans=0;
    for(int i=1;s[i];i++)
    {
        if(s[i]==A)
        ans=(ans+dp1[i-1]*dp2[i+1])%MOD;
    }
    printf("%lld\n",ans);
    return 0;
}

 

以上是关于PAT (Advanced Level) 1093. Count PAT's (25)的主要内容,如果未能解决你的问题,请参考以下文章

PAT (Advanced Level) 1093. Count PAT's (25)

PAT Advanced 1093 Count PAT's (25分)

PAT (Advanced Level) 1025. PAT Ranking (25)

PAT Advanced Level 1044

PAT Advanced Level 1043

PAT Advanced Level 1079