2021 ICPC济南 J Determinant
题意就是给定一个矩阵,然后给出他的行列式的绝对值,这个值是精确的,然后让我们判断行列式的正负。
思路来源:一个Acmer
首先做这个题要明白一个性质才可以做,一个数和它的相反数对一个奇数的取模一定不同,因此对于这个题而言,我们只需要选一个模数然后求行列式的值然后与给定的精确值取模后的结果相比较即可,也就是说如果我们算出来的值与给定值相同,那么说明他俩同号,否则说明异号,然后来证明这个性质:
任意一对非的相反数,有,为奇数,且,。
假设,那么令,,那么则有,并且,。
那么得知:
- 为偶数
而把代入上面式子得,那么说明,由得知,那么,即,又因为是奇数,而是偶数,所以矛盾。
规则
- 矩阵转置,行列式不变
- 矩阵行(列)交换,行列式取反
- 矩阵行(列)相加减,行列式不变
- 矩阵行(列)所有元素同时乘以一个数,行列式等比例变大
// Problem: P7112 【模板】行列式求值
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P7112
// Memory Limit: 64 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 110, Mod = 1e9 + 7;
int a[N][N];
int n;
LL qmi(LL a, LL b, LL Mod) {
LL res = 1;
while (b) {
if (b & 1) res = res * a % Mod;
b >>= 1;
a = a * a % Mod;
}
return res % Mod;
}
LL Guass() {
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;
break;
}
swap(a[i], a[k]); //把最大的一行放到最上边
if (i != 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++) {
a[j][l] = (a[j][l] - 1ll * a[i][l] * a[j][i] % Mod + Mod) % Mod;
}
}
}
}
return det;
}
int main() {
int t;
cin >> t;
while (t--) {
cin >> n;
string s;
cin >> s;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
LL res = s[0] - '0';
for (int i = 1; i < s.size(); i++) {
res = (res * 10 % Mod + s[i] - '0') % Mod;
}
puts(res == Guass() ? "+" : "-");
}
return 0;
}
分类:
之前的比赛题目 / 比赛
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端