比赛 26暑假集训模拟赛3 评测结果 AAAAAAAAAAAAAAAAAAAAAAAAA
题目名称 Moo Decomposition 最终得分 100
用户昵称 郑霁桓 运行时间 1.263 s
代码语言 C++ 内存使用 15.04 MiB
提交时间 2026-07-06 08:42:55
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long k,n,l,f[1000005],ff[1000005],as=1,ct;
const long long M=1e9+7;
string s;
inline long long pw(long long x,long long y){
    long long ss=1;
    while(y){
        if(y&1) ss=ss*x%M;
        x=x*x%M;
        y>>=1;
    }
    return ss;
}
long long C(long long x,long long y){
    if(x<y) return 0;
    return f[x]*ff[y]%M*ff[x-y]%M;
}
int main(){
    freopen("Moo.in","r",stdin);
    freopen("Moo.out","w",stdout);
    ios::sync_with_stdio(false);
    cin>>k>>n>>l>>s;
    s=' '+s,f[0]=ff[0]=ff[1]=1;
    for(int i=1;i<=n;i++) f[i]=f[i-1]*i%M;
    for(int i=2;i<=n;i++) ff[i]=(M-M/i)*ff[M%i]%M;
    for(int i=2;i<=n;i++) ff[i]=ff[i-1]*ff[i]%M;
    for(int i=n;i>=1;i--){
        if(s[i]=='O') ct++;
        else{
            as=as*C(ct,k)%M;
            ct-=k;
        }
    }
    as=pw(as,l);
    cout<<as;
    return 0;
}