1093 Count PAT‘s (25 分)【难度: 一般 / 知识点: 前缀和 组合数】

在这里插入图片描述
https://pintia.cn/problem-sets/994805342720868352/problems/994805373582557184
PAT乙级的原题,这里不在赘述,就是前缀和,加简单的组合数。

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e5+10;
const int mod=1e9+7;
LL P[N],T[N];
int main(void)
{
    
    
    string s; cin>>s;
    s="0"+s;//加一个多余的字符让其下标从1开始
    for(int i=1;i<s.size();i++) P[i]=P[i-1]+(s[i]=='P'?1:0);
    for(int i=s.size()-1;i>=1;i--) T[i]=T[i+1]+(s[i]=='T'?1:0);
    LL ans=0;
    for(int i=1;i<s.size();i++)
        if(s[i]=='A') ans=(ans+P[i-1]*T[i+1])%mod;
    cout<<ans;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46527915/article/details/121388356