救救我吧!
查看原帖
救救我吧!
289056
北射天狼楼主2023/7/4 11:48

大概是快速幂有问题,但是查不出来啊,查了一个早上了,啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊。

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int Mod = 1e9 + 7;
const int N = 114;
int n,b;
struct Drind{
	int a[N][N];
};
Drind operator * (Drind x,Drind y){
    Drind z;
	for (int i=1;i<=n;i++)
	   	for (int j=1;j<=n;j++)
	    	for (int l=1;l<=n;l++)
		    	z.a[i][j] = (z.a[i][j] + x.a[i][l] * y.a[l][j] % Mod) % Mod;
	for (int i=1;i<=n;puts(""),i++)
	return z; 	
}
Drind a,k;
signed main()
{
	
	scanf("%lld%lld",&n,&b);
	for (int i=1;i<=n;i++)
	    for(int j=1;j<=n;j++)
	        scanf("%lld",&a.a[i][j]);
	memset(k.a,0,sizeof(k.a));
	for (int i=1;i<=n;i++)
	    k.a[i][i] = 1;
    for (;b;b>>=1,a = a * a){
    	if (b & 1)
    	    k = k * a;
    	for (int i=1;i<=n;puts(""),i++)
	    	for (int j=1;j<=n;j++)
	        	cout << k.a[i][j] << " ";
	}
	for (int i=1;i<=n;i++){
	   for (int j=1;j<=n;j++){
	   	    cout << k.a[i][j] << " ";
	   }
	   cout << endl;
	}
	return 0;	    
}
2023/7/4 11:48
加载中...