求助
  • 板块学术版
  • 楼主cmpt_xiaoxiao
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/1/28 20:41
  • 上次更新2024/1/28 22:20:34
查看原帖
求助
954694
cmpt_xiaoxiao楼主2024/1/28 20:41

P3390 【模板】矩阵快速幂

WA码:

#include<iostream>
#include<cstring>
#define int long long
using namespace std;
const int N=105;
const int mod=1e9+7;
int n,k;
int a[N][N];
struct mu{
	int a[N][N];
	int n;
	mu(){
		memset(a,0,sizeof a);
		n=0;
	}
}A;
mu operator *(const mu & A,const mu & B){
	mu res;
	res.n=A.n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				res.a[i][j]=(res.a[i][j]+A.a[i][k]*B.a[k][j]%mod)%mod;
				res.a[i][j]%=mod;
			}
		}
	}
	return res;
}
mu pow(mu B,int k){
	mu res;
	res.n=n;
	for(int i=1;i<=n;i++){
		res.a[i][i]=1;
	}
	while(k){
		if(k&1){
			res=res*B;
		}
		B=B*B;
		k>>=2;
	}
	return res;
}
signed main(){
	cin>>n>>k;
	A.n=n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>A.a[i][j]; 
		}
	}
	mu ans=pow(A,k);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<ans.a[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

膜拜大佬

2024/1/28 20:41
加载中...