只过了一个样例,求调
查看原帖
只过了一个样例,求调
638272
thehanged楼主2024/4/10 11:00

可能溢出的地方都提前取模了,造了点测试案例也没有发现移除,难道是逻辑错了

#include <iostream>
#include <cstring>
using namespace std;

#define LL long long
#define MOD(x) ((LL)(x) % (LL)(1e9 + 7))
const int N = 110;
int n, A[N][N];
LL k;

void mul(int a[N][N], int b[N][N]){
	int c[N][N] = {0}; 
	for(int i = 0; i < n; ++ i)
		for(int j = 0; j < n; ++ j)
			for(int k = 0; k < n; ++ k)
				c[i][j] = MOD(MOD(c[i][j]) + MOD(1LL * a[i][k] * b[k][j]));
	memcpy(a, c, sizeof c);
}

void mod_exp_fast(int A[N][N], LL exp){
	int I[N][N] = {0};
	for(int i = 0; i < n; ++ i)
		I[i][i] = 1;
	exp = MOD(exp);
	while(exp){
		if(exp & 1 == 1)
			mul(I, A);
		mul(A, A);
		exp >>= 1;
	}
	memcpy(A, I, sizeof I);
}

int main(){
	cin >> n >> k;
	for(int i = 0; i < n; ++ i)
		for(int j = 0; j < n; ++ j)
			cin >> A[i][j];
		
	mod_exp_fast(A, k);
	
	for(int i = 0; i < n; ++ i){
		for(int j = 0; j < n; ++ j){
			cout << A[i][j] << ' ';
		}
		cout << endl;
	}
	
	return 0;
}
2024/4/10 11:00
加载中...