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届济南站热身赛
2021 ICPC沈阳 J.Luggage Lock(bfs,模拟)
2021 ICPC沈阳 J.Luggage Lock(bfs,模拟)