绷不住了,ILE on #15
查看原帖
绷不住了,ILE on #15
769006
crzcqh楼主2025/8/29 21:26
#include<bits/stdc++.h>
using namespace std;
const int N=60;
const int P=1e9+7;
inline void mul(int n,int a[][N],int b[][N]){
    int tmp[N][N];
    memset(tmp,0,sizeof(tmp));
    for(int i=1;i<=n;i++)
        for(int l=1;l<=n;l++)  
            for(int j=1;j<=n;j++){
                tmp[i][j]=(tmp[i][j]+1ll*a[i][l]*b[l][j]%P)%P;
            }
    memcpy(a,tmp,sizeof tmp);  
}
inline void qpow(int n,int a[][N],int k){
    int ans[N][N];
    memset(ans,0,sizeof(ans));
    for(int i=1;i<=n;i++)
        ans[i][i]=1; 
    while(k){
        if(k&1)
            mul(n,ans,a);  
        mul(n,a,a);
        k>>=1;
    }
    memcpy(a,ans,sizeof(ans)); 
}
inline int get(char ch){
    if(ch>='a'&&ch<='z')
        return ch-'a'+1;
    return ch-'A'+27; 
}
int n,m,k,ans;
int p[N][N];
inline int read(){
	int s=0;
	char ch=getchar();
	while(!isdigit(ch))
		ch=getchar();
	while(isdigit(ch)){
		s=(s<<3)+(s<<1)+(ch^48);
		ch=getchar();
	}
	return s;
}
signed main(){
	n=read(),m=read(),k=read();
    for(int i=1;i<=m;i++)
        for(int j=1;j<=m;j++)
            p[i][j]=1; 
    for(int i=1;i<=k;i++){
        char x,y,ch=getchar();
        while(ch<'a'||ch>'z')
        	ch=getchar();
        x=ch;
        ch=getchar();
        y=ch;
        p[get(x)][get(y)]=0;
    }
    qpow(m,p,n-1);
    for(int i=1;i<=m;i++)
        for(int j=1;j<=m;j++)
            ans=(ans+p[i][j])%P;
    cout<<ans<<endl;
    fflush(stdout);
    return 0;
}

2025/8/29 21:26
加载中...