P3390 矩阵快速幂 求调
  • 板块学术版
  • 楼主_Weslie_
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/5/30 14:17
  • 上次更新2024/5/30 17:38:31
查看原帖
P3390 矩阵快速幂 求调
511959
_Weslie_楼主2024/5/30 14:17

就过了 #11

悬 1 关

#include<bits/stdc++.h>
using namespace std;
const long long mod=1000000007;
struct Matrix{
	long long c[105][105];
    Matrix() {memset(c,0,sizeof c);}
}A,I; 
long long n,k;
Matrix operator*(const Matrix x,const Matrix y){
	Matrix a;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a.c[i][j]=0;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				a.c[i][j]+=x.c[i][k]*y.c[k][j]%mod;
				a.c[i][j]%=mod;
			}
		}
	}
	return a;
} 
void qpow(int b){
	while(b>0){
		if(b%2==1)I=I*A;
		A=A*A;
		b>>=1;
	}
}
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>A.c[i][j];
			A.c[i][j]%=mod; 
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i==j)I.c[i][j]=1;
			else I.c[i][j]=0;
		}
	}
	qpow(k); 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<I.c[i][j]%mod<<' ';
		}
		cout<<endl;
	}
	return 0;
}
2024/5/30 14:17
加载中...