刚学线代的萌新求助
查看原帖
刚学线代的萌新求助
200044
JS_TZ_ZHR楼主2021/1/28 20:23

RT,Wa77pts

#include<bits/stdc++.h>
#define N 605
#define ll long long
using namespace std;
int n,mod,a[N][N],p,opt,t,ans=1;
int main() {
	scanf("%d%d",&n,&mod);
	for(int i=1; i<=n; i++)
		for(int j=1; j<=n; j++)scanf("%d",&a[i][j]),a[i][j]%=mod;
	for(int i=1; i<=n; i++) {
		p=i;
		for(int j=i; j<=n; j++)if((a[j][i]&&a[j][i]<a[p][i])||(!a[p][i]))p=j;
		if(!a[p][i])return 0;
		if(p!=i)swap(a[i],a[p]),opt^=1;
		for(int j=i+1; j<=n; j++) {
			if(a[j][i]>a[i][i])opt^=1,swap(a[i],a[j]);
			while(a[j][i]) {
				t=a[i][i]/a[j][i];
				for(int k=i; k<=n; k++)a[i][k]=(a[i][k]+(ll)(mod-t)*a[j][k])%mod;
				swap(a[i],a[j]),opt^=1;
			}
		}
		ans=((ll)ans*a[i][i])%mod;
	}
	printf("%d\n",opt?mod-ans:ans);
}
2021/1/28 20:23
加载中...