2021 ICPC济南J行列式
题的意思是给出一个矩阵,然后给出它的行列式的绝对值,这是准确的,然后让我们判断行列式的正负。
思路来源:一个Acmer
首先,我们应该先了解一个属性,然后才能做这个问题。对于这个问题,我们只需要选择一个模,然后求出行列式的值,然后与给定精确值进行模化后的结果进行比较。也就是说,如果计算值与给定值相同,那么它们是同一个符号,否则,它们是不同的符号,然后我们可以证明这个性质:
任何一对非\(0\)的反数都有\(x_1 \not\equiv x_2 (\mod p)\),\(p\)是奇数,\(x_1 \mod p \neq 0\),\(x
\[\begin{aligned}
x_1 x_2=0\\
=(x_1 x_2) \mod p=0\\
=(x_1 \mod p x_2 \mod p) \mod p=0 \,\,\,\,\,(1)\
\ end {对齐}
\]如果\(x_1 \equiv x_2 (\mod p)\),那么让\(t_1=x_1 \mod p\),\(t_2=x_2 \mod p\),那么就有\(t_
然后学习:
\(t_1 t_2\)是偶数。
\(t _ 1t _ 2 2 \次p \,\,\,\,\,(2)\)
并将\(t_i (i=1,2)\)代入上述公式\((1)\)得到\((t_1 t_2)\ mod p=0 \),然后\((t_1 t_2)=kp\)
规则
矩阵转置,行列式不变
矩阵行(列)交换,行列式反演
矩阵的行(列)被加减,行列式保持不变。
矩阵(列)的所有元素同时乘以一个数,行列式的等比例变大。
//problem : p 7112[模板]行列式求值
//Contest:洛古
//URL : https://www.luogu.com.cn/problem/P7112
//内存限制: 64 MB
//时间限制: 2000毫秒
//
//由CP编辑提供动力(https://cpeditor.org)
#包含位/stdc。h
使用命名空间标准;
typedef长长LL;
const int N=110,Mod=1e 9 7;
int a[N][N];
int n;
LL qmi(LL a、LL b、LL Mod){ 0
LL RES=1;
而(b){ 0
if(B1)RES=RES * a % Mod;
b=1;
a=a * a % Mod
}
返回res % Mod
}
LL Guass(){ 0
LL det=1;
for(int I=1;I=n;I) {//枚举列
int k=I;
for(int j=I ^ 1;j=n;J) //把最大的线放在最上面。
if(ABS(a[j][I])ABS(a[k][I]))k=j;
If (abs(a[k][i])==0) {//如果对角线为0,则结果为0。
det=0;
打破;
}
互换(a[i],a[k]);//把最大的一行放在最上面
如果(我!=k)det=-det;//如果有换行符,行列式反过来。
det=(1ll * det * a[I][I]% Mod Mod)% Mod;//成果贡献
for(int j=I ^ 1;j=n;j ) {
a[I][j]=1ll * a[I][j]* qmi(a[I][I],Mod - 2,Mod)% Mod;//将每行的第一位数字改为1,这里是模。
}
for(int j=1;j=n;j ) {
if (j!=i a[j][i]) {
for(int l=I 1;l=n;l){ 0
a[j][l]=(a[j][l]-1ll * a[I][l]* a[j][I]% Mod)% Mod;
}
}
}
}
返回det
}
int main(){ 0
int t;
CINt;
while(t-){ 0
CIN;
字符串s;
cin的;
for(int I=1;I=n;I){ 0
for(int j=1;j=n;j ) {
CIN a[I][j];
}
}
LL RES=s[0]—“0”;
for(int I=1;I . s . size();I){ 0
RES=(RES * 10% Mod s[I]-(0))% Mod;
}
puts(RES==Guass()' ' : '-');
}
返回0;
}
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/107453.html