46分,求指错(跟题解做法有区别
查看原帖
46分,求指错(跟题解做法有区别
490978
小超手123楼主2024/7/16 11:57

rt

#define int long long
#define N 610
using namespace std;

int n, mod;
int a[N][N];

void work() {
	int x = 1, ans = 1;
	for(int i = 1; i <= n; i++) {
		int id = 0;
		for(int j = i; j <= n; j++) 
			if(a[j][i]) {
				id = j;
				break;
			}
		if(!id) {
			cout << 0;
			exit(0);
		}
		if(id != i) {
			x = -x;
			for(int j = i; j <= n; j++) swap(a[id][j], a[i][j]);
		}
		for(int j = i + 1; j <= n; j++) {
			int Num = a[j][i];
			for(int k = 1; k <= n; k++) a[j][k] = a[j][k] * a[i][i] % mod; 
			ans = ans * a[i][i] % mod;
			for(int k = 1; k <= n; k++) a[j][k] = (a[j][k] - Num * a[i][k] % mod + mod) % mod;
		}
	}
	/*for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= n; j++) cout << a[i][j] << " ";
		cout << endl;
	}*/
	
	for(int i = 1; i <= n; i++) ans = ans * a[i][i] % mod;
	ans = (ans * x + mod) % mod;
	cout << ans;
}
signed main() {
	//freopen("P7112_1.in", "r", stdin);
	//freopen("x.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> n >> mod;
	for(int i = 1; i <= n; i++)
	for(int j = 1; j <= n; j++) cin >> a[i][j], a[i][j] %= mod;

	work();
	return 0;
}

#include<bits/stdc++.h>
#define int long long
#define N 610
using namespace std;

int n, mod;
int a[N][N];

void work() {
	int x = 1, ans = 1;
	for(int i = 1; i <= n; i++) {
		int id = 0;
		for(int j = i; j <= n; j++) 
			if(a[j][i]) {
				id = j;
				break;
			}
		if(!id) {
			cout << 0;
			exit(0);
		}
		if(id != i) {
			x = -x;
			for(int j = i; j <= n; j++) swap(a[id][j], a[i][j]);
		}
		for(int j = i + 1; j <= n; j++) {
			int Num = a[j][i];
			for(int k = 1; k <= n; k++) a[j][k] = a[j][k] * a[i][i] % mod; 
			ans = ans * a[i][i] % mod;
			for(int k = 1; k <= n; k++) a[j][k] = (a[j][k] - Num * a[i][k] % mod + mod) % mod;
		}
	}
	/*for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= n; j++) cout << a[i][j] << " ";
		cout << endl;
	}*/
	
	for(int i = 1; i <= n; i++) ans = ans * a[i][i] % mod;
	ans = (ans * x + mod) % mod;
	cout << ans;
}
signed main() {
	//freopen("P7112_1.in", "r", stdin);
	//freopen("x.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> n >> mod;
	for(int i = 1; i <= n; i++)
	for(int j = 1; j <= n; j++) cin >> a[i][j], a[i][j] %= mod;

	work();
	return 0;
}

2024/7/16 11:57
加载中...