90分求助
查看原帖
90分求助
511811
崛起的滑稽楼主2022/12/31 11:54
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int WEIGHT = 2000 + 10;
const ll MOD = 1000000007;
const int HEIGHT = 1000 + 10;
struct matrix {
	ll c[HEIGHT][WEIGHT];
	matrix() {
		memset(c, 0, sizeof(c));
	}
} A, res;
ll n, k;
ll qpow(ll n, ll k) {
	ll ans = 1;
	while (k) {
		if (k & 1)
			ans = ans * n % MOD;
		n = n * n % MOD;
		k >>= 1;
	}
	return ans;
}
bool G_J() {
	for (int i = 1; i <= n; ++i) {
		int tmp = i;
		for (int k = 1; k <= n; ++k) {
			if (A.c[k][i] != 0) {
				tmp = k;
				break;
			}
		}
		if (tmp == i) {
			swap(A.c[tmp], A.c[i]);
		}
		if (A.c[i][i] == 0) {
			return false;
		}
		int x = qpow(A.c[i][i], MOD - 2);
		for (int k = 1; k <= n; ++k) {
			if (k == i) {
				continue;
			}
			int t = A.c[k][i] * x % MOD;
			for (int j = i; j <= 2 * n; ++j) {
				A.c[k][j] = ((A.c[k][j] - t * A.c[i][j]) % MOD + MOD) % MOD;
			}
		}
		for (int k = 1; k <= n * 2; ++k) {
			A.c[i][k] = (A.c[i][k] * x) % MOD;
		}

	}
	return 1;
}
int main() {
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		for (int j = 1; j <= n; ++j) {
			cin >> A.c[i][j];
		}
		A.c[i][i + n] = 1;
	}
	if (G_J()) {
		for (int i = 1; i <= n; ++i) {
			for (int j = n + 1; j <= 2 * n; ++j) {
				cout << A.c[i][j] << " ";
			}
			cout << endl;
		}
	} else {
		cout << "No Solution";
	}
}
2022/12/31 11:54
加载中...