P5196 [USACO19JAN] Cow Poetry G

 

 

 

 

 

 

>>>int 可以 -> long long
>>>you mod no long long arrary ky have ll sum
>>>wu mod long long

//int 可以 -> long long 
//you mod no long long arrary ky have ll sum
//wu mod long long

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
#define ll long long
#define ddd printf("-----------------debug\n");
using namespace std;
const int maxn=5555;
const ll p=1e9+7;

int n,m,k;
int len[maxn],y[maxn];
int f[maxn][maxn],fdp[maxn],cnt[33];

ll ksm(int x,int b){//!!!!!!!!!!!!!!!!!!!!!!! 
    ll res=1,a=x;//avoid exceed
    while(b)
    {
        if(b%2==1) res=res*a%p;
        a=a*a%p;
        b/=2;//!!!!!!!!!!!!!!!!
    }
    return res;
}

int main()
{
    ios::sync_with_stdio(false); cin.tie(0);
//    cin>>n>>m>>k;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=n;i++) scanf("%d%d",&len[i],&y[i]);
    
    fdp[0]=1;
    for(int i=1;i<=k;i++)
    {
        for(int j=1;j<=n;j++)
        {
        //    if(i>=len[j])
        //    {
                fdp[i]=(fdp[i]+fdp[i-len[j]])%p;//shu zu jianfa 
                f[i][y[j]]=(f[i][y[j]]+fdp[i-len[j]])%p;
        //    }
        
        }    
    } 
//    ddd
    for(int i=1;i<=m ;i++)
    {
        getchar();
        char ch=getchar();
        ++cnt[ch-'A'+1];
    //    cout<<cnt[ch-'A'+1]<<endl;
    }
    
    ll ans=1;/////////////
    for(int i=1;i<=26;i++)
    {    
        if(cnt[i]!=0)
        {
            ll tmp=0;
            for(int j=1;j<=n;j++)
                if(f[k][j]!=0)
                    tmp=( tmp+ksm(f[k][j],cnt[i])%p )%p;
                            
            ans=ans*tmp%p;
        }
    
    }
    cout<<ans;

    return 0;
}
View Code

 

 
 
 
posted @ 2023-07-29 21:15  JMXZ  阅读(11)  评论(0)    收藏  举报