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分)