2021 ICPC Jinan J .Determinant

Posted thusloop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021 ICPC Jinan J .Determinant相关的知识,希望对你有一定的参考价值。

题意:给出行列式和det的绝对值 ,求det的正负
取大质数mod(不是det的因子) det取模,高斯消元求出det 取模 若相等则+,否则-;
(mod-det)%mod 和det%mod 当det=mod或 mod-det=det时相等

#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
#define int long long
const int maxn=1e5+50;
const int N=110;
const int mod=998244353;
int n,m;
int a[N][N];
int qpow(int a, int n, int mod)
{
	int ans = 1;
	while(n)
	{
		if(n&1)ans=ans*a%mod;
		a=a*a%mod;
		n>>=1;
	}
	return ans;
}
int inv(int a)
{
	return qpow(a, mod - 2, mod);
}
int gauss(int A[N][N],int n)
{
	int ans = 1;
	for(int i=1;i<=n;i++)
	{
		for(int j=i;j<=n;j++)
		{
			if(A[j][i])
			{
				for(int k=i;k<=n;k++) swap(A[i][k], A[j][k]);
				if(i!=j) ans=-ans;
				break;
			}
		}
		if(!A[i][i]) return 0;
		for(int j=i+1,iv=inv(A[i][i]);j<=n;j++)
		{
			int t=A[j][i]*iv%mod;
			for(int k=i;k<=n;k++)
				A[j][k]=(A[j][k]-t*A[i][k]%mod+mod)%mod;
		}
		ans = (ans*A[i][i]%mod+mod)%mod;
	}
	return ans;
}

string s;
int det;
void solve()
{
	cin>>n;
	cin>>s;
	det=0;
	for(int i=0; i<s.size(); i++)
	{
		det=det*10+s[i]-'0';
		det%=mod;
	}
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=n; j++)
		{
			cin>>a[i][j];
		}
	}
	det%=mod;
	int res=gauss(a,n);
	if(det==res)
	{
		cout<<"+"<<endl;
	}
	else
	{
		cout<<"-"<<endl;
	}
}
signed main()
{
	IOS
	int tt;
	cin>>tt;
	while(tt--)
	{
		solve();
	}
}

以上是关于2021 ICPC Jinan J .Determinant的主要内容,如果未能解决你的问题,请参考以下文章

The 46th ICPC Asia Jinan Regional Contest,2021,46届济南站热身赛

ICPC2021银川C

2021 ICPC沈阳 J.Luggage Lock(bfs,模拟)

2021 ICPC沈阳 J.Luggage Lock(bfs,模拟)

2021-icpc网络赛第二场-M.J.G.L(后续补题中)

2021/11/21 ICPC沈阳站个人题解B,E,F,J(附赛时记录,另附赛后补题代码I,M)