64分求调
查看原帖
64分求调
1220111
xiaoyang222楼主2024/11/13 22:30

样例都过不去。

#include <iostream>
#define int long long
using namespace std;
const int N=600+5;
int n,a[N][N],p;
void swapw(int x,int y){
	if (x==y) return;
	for (int i=1;i<=n;++i) swap(a[x][i],a[y][i]);
}
void gcd(int x,int y,int id){//辗转相除消
	int qwq;
	while (a[x][id] && a[y][id]){
		if (a[x][id]<=a[y][id]){
			qwq=a[y][id]/a[x][id];
			for (int i=1;i<=n;++i) a[y][i]=(a[y][i]-a[x][i]*qwq%p+p)%p;
		}else{
			qwq=a[x][id]/a[y][id];
			for (int i=1;i<=n;++i) a[x][i]=(a[x][i]-a[y][i]*qwq%p+p)%p;
		}
	}
	if (a[x][id]==0) swapw(x,y);//被反杀了
}
void solve(){//消元
	for (int i=1;i<=n;++i){
		int qaq=0;
		for (int k=i;k<=n;++k)
			if (a[k][i]){
				qaq=k;
			}
		if (qaq){
			swapw(qaq,i);
		}else{
			cout<<0<<"\n";
			exit(0);
		}
		for (int k=i+1;k<=n;++k){
			gcd(i,k,i);
		}
// 		cout<<"\n";
// 		for (int i=1;i<=n;++i,cout<<"\n") for (int j=1;j<=n;++j) cout<<a[i][j]<<" ";
	}
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin >> n >> p;
	for (int i=1;i<=n;++i)
		for (int j=1;j<=n;++j)
			cin >> a[i][j];
	solve();
	int ans=1;
// 	for (int i=1;i<=n;++i,cout<<"\n") for (int j=1;j<=n;++j) cout<<a[i][j]<<" ";
	for (int i=1;i<=n;++i) ans=ans*a[i][i]%p;
	cout<<ans<<"\n";
	return 0;
}
2024/11/13 22:30
加载中...