爆0求调
  • 板块灌水区
  • 楼主Jerry_heng
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/10/28 22:43
  • 上次更新2023/10/27 05:17:45
查看原帖
爆0求调
763878
Jerry_heng楼主2022/10/28 22:43

快速矩阵幂

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll mod=1e9+7;
int n,m;
struct node{
	ll g[101][101];
}f,res,ans;
void unit(node &x){
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(i==j) x.g[i][j]=1;
			else x.g[i][j]=0;
}
node cheng(node x,node y){
	node z;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			z.g[i][j]=0;	
	for(int a=1;a<=n;a++)
		for(int b=1;b<=n;b++)
			for(int c=1;c<=n;c++)
				z.g[a][c]=(z.g[a][c]+x.g[a][b]*y.g[b][c])%mod;
	return z;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>f.g[i][j];
	unit(ans);
	while(m){
		if(m&1)ans=cheng(ans,f);
		f=cheng(f,f);
		m=m/2;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)
			cout<<ans.g[i][j]<<" ";
		cout<<endl;
	}
	return 0;
} 
2022/10/28 22:43
加载中...