竟然爆零了,帮忙改下错
查看原帖
竟然爆零了,帮忙改下错
162196
伟大的王夫子楼主2020/9/12 17:23
// luogu-judger-enable-o2
#include <bits/stdc++.h>
using namespace std;
const int P = 1e9 + 7;
struct matrix {
	int n, m;
	int a[110][110];
	matrix(int x) {
		n = m = x;
		for (register int i = 1; i <= n; ++i)
			a[i][i] = 1;
	}
	matrix() {
		
	}
};
void add(int &x, long long y) {
	x = 1ll * (x + y) % P;
}
matrix operator * (const matrix &a, const matrix &b) {
	matrix c;
	c.n = a.n, c.m = b.m;
	//cout << c.n << ' ' << a.m << ' ' << c.m << endl;
	for (register int k = 1; k <= a.m; ++k)
		for (register int i = 1; i <= c.n; ++i)
			for (register int j = 1; j <= c.m; ++j)

				add(c.a[i][j], 1ll * a.a[i][k] * b.a[k][j] % P);

	return c;
}
void print(matrix c) {
	for (register int i = 1; i <= c.n; ++i) {
		for (register int j = 1; j <= c.m; ++j)
			cout << c.a[i][j] << ' ';
		puts("");
	}
}
int m;
matrix a;
int main() {
	cin >> a.n >> m;
	for (register int i = 1; i <= a.n; ++i)
		for (register int j = 1; j <= a.n; ++j)
			cin >> a.a[i][j];
	matrix c(a.n);
	a.m = a.n;
//	if (m <= 1) {
//		print(a);
//		return 0;
//	}
	for (; m; m >>= 1) {
		if (m & 1) c = c * a;
		a = a * a;
	}
	print(c);

}
2020/9/12 17:23
加载中...