不知道哪错了,求调
查看原帖
不知道哪错了,求调
1082566
glance02楼主2024/3/6 20:28
#include<bits/stdc++.h>
#define mo 1000000000+7
#define ll long long
using namespace std;
struct matrix{
	ll m[100][100];
	matrix (){
		memset(m,0,sizeof(m));//初始化操作
	}
};
int n;matrix ma;
matrix operator *(const matrix &a,const matrix &b){
	matrix c;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			for(int k=1;k<=n;k++)
				c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%mo;
	return c;
}
matrix pow_matrix(matrix &a,int k){
	matrix ans;
	for(int i=1;i<=n;i++){
		ans.m[i][i]=1;//这里是题目里面规定的
	}//初始化矩阵
	while(k){//快速幂
		if(k&1) ans=ans*a;
		a=a*a;
		k>>=1;
	}
	return ans;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int k;cin>>n>>k;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>ma.m[i][j];
	matrix res=pow_matrix(ma,k);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)
			cout<<res.m[i][j]<<" ";
		cout<<"\n";
	}
	return 0;
}
2024/3/6 20:28
加载中...