题意就是给定一个矩阵,然后给出他的行列式的绝对值,这个值是精确的,然后让我们判断行列式的正负。

思路来源:一个Acmer

首先做这个题要明白一个性质才可以做,一个数和它的相反数对一个奇数的取模一定不同,因此对于这个题而言,我们只需要选一个模数然后求行列式的值然后与给定的精确值取模后的结果相比较即可,也就是说如果我们算出来的值与给定值相同,那么说明他俩同号,否则说明异号,然后来证明这个性质:

任意一对非\(0\)的相反数,有\(x_1 \not\equiv x_2 (\mod p)\),\(p\)为奇数,且\(x_1 \mod p \neq 0\),\(x_2 \mod p \neq 0\)。

\[\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{aligned}
\]

假设\(x_1 \equiv x_2 (\mod p)\),那么令\(t_1 = x_1 \mod p\),\(t_2 = x_2 \mod p\),那么则有\(t_1 = t_2\),并且\(t_1 < p\),\(t_2 < p\)。

那么得知:

  • \(t_1 + t_2\)为偶数
  • \(t_1 + t_2 < 2 \times p \,\,\,\,\, (2)\)

    而把\(t_i (i = 1, 2)\)代入上面式子\((1)\)得\((t_1 + t_2) \mod p == 0\),那么说明\((t_1 + t_2) = kp\),由\((2)\)得知\(0 < k < 2\),那么\(k = 1\),即\((t_1 + t_2) = p\),又因为\(p\)是奇数,而\((t_1 + t_2)\)是偶数,所以矛盾。

规则

  • 矩阵转置,行列式不变
  • 矩阵行(列)交换,行列式取反
  • 矩阵行(列)相加减,行列式不变
  • 矩阵行(列)所有元素同时乘以一个数,行列式等比例变大
// 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;
}

2021 ICPC济南 J Determinant的更多相关文章

  1. 2021ICPC网络赛第一场部分题解-The 2021 ICPC Asia Regionals Online Contest (I)

    写在前面 本来应该6题的,结果不知道哪个铸币发了H的clar,当即把我们的思路转向三维几何上.当时我们还在想这三维计算几何的正确率有点太高了还在感叹ICPC选手的含金量,直到赛后我才知道这H题的铸币出 ...

  2. 2018-2019 ICPC, NEERC J. Streets and Avenues in Berhattan(DP)

    题目链接:https://codeforc.es/contest/1070/problem/J 题意:给出一个长度为 k 的字符串,选出 n 个和 m 个不同位置的字符构成两个字符串,使得两个字符串相 ...

  3. 2021 ICPC Gran Premio de Mexico 2da Fecha部分题题解

    前面的水题,在队友的配合下,很快就拿下了,剩下几道大毒瘤题,一直罚座三个小时,好让人自闭...但不得不说,这些题的质量是真的高! H. Haunted House 首先看这个题,大眼一扫,觉得是某种数 ...

  4. 15-16 ICPC europe J Saint John Festival (graham扫描法+旋转卡壳)

    题意:给n个大点,m个小点$(n<=1e5,m<=5e5),问有多少个小点,存在3个大点,使小点在三个大点组成的三角形内. 解题思路: 首先,易证,若该小点在某三大点行成的三角形内,则该小 ...

  5. 2021 ICPC 江西省赛总结

      比赛链接:https://ac.nowcoder.com/acm/contest/21592   大三的第一场正式赛,之前的几次网络赛和选拔赛都有雄哥坐镇,所以并没有觉得很慌毕竟校排只取每个学校成 ...

  6. 【2021 ICPC Asia Jinan 区域赛】 C Optimal Strategy推公式-组合数-逆元快速幂

    题目链接 题目详情 (pintia.cn) 题目 题意 有n个物品在他们面前,编号从1自n.两人轮流移走物品.在移动中,玩家选择未被拿走的物品并将其拿走.当所有物品被拿走时,游戏就结束了.任何一个玩家 ...

  7. 2021 icpc 沈阳 I 【分式线性变换的保交比性】

    分式线性变换的保交比性 对于分式线性变换,具有保交比性 应用 在复数域下,存在分式线性变换,给定三个输入和输出,再给定第四个输入,求其在这个分式线性变换下的输出. https://codeforces ...

  8. CCPC、Petrozavodsk Camp、OpenCup 题解汇总

    省赛 \([\text{2021.11.30}]\) 2021 Jilin Collegiate Programming Contest 全部完成. \([\text{2021.12.25}]\) 2 ...

  9. 线性代数-矩阵-【1】矩阵汇总 C和C++的实现

    矩阵的知识点之多足以写成一本线性代数. 在C++中,我们把矩阵封装成类.. 程序清单: Matrix.h//未完待续 #ifndef _MATRIX_H #define _MATRIX_H #incl ...

  10. JavaSE基础之矩阵运算

    JavaSE基础之矩阵运算 1.矩阵类:Matrix.java 包括矩阵的加.乘运算,行列式的求解,最大最小元素等 package cn.com.zfc.help; import java.text. ...

随机推荐

  1. 2021-10-09 Core学习

    控制器学习 如果有ID参数,根据前面定义的{controller=Home}/{action=Index}/{id?} 可以换成一下格式 页面学习 视图 基架搭建 然后在nuget控制台添加 Add- ...

  2. deepin install mariadb

    输入指令: sudo apt-get install mariadb-server mariadb-client

  3. 如何破解wifi密码?

    前期准备: kali 系统 外置无线网卡 破解过程: 首先,需要登录kali系统,可以是虚拟机. 在虚拟机中设置点击 虚拟机-可移动设备-无线网卡的名称,将无线网卡绑定到kali虚拟机上. 在kali ...

  4. 开机自动打开termux以及启动termux的服务

    ps:因为我们的服务是安装在平板上面的termux,客户不想维护麻烦,如果平板重启之后还需要手动启动ternux,还要开启命令启动服务,这样比较麻烦,所以研究如下操作 1.安装macroDroid 直 ...

  5. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-12-playwright操作iframe-中篇

    1.简介 按照计划今天就要用实际的例子进行iframe自动化测试.经过宏哥长时间的查找,终于找到了一个含有iframe的网页(QQ邮箱和163邮箱),别的邮箱宏哥就没有细看了.所以今天这一篇的主要内容 ...

  6. 【JMeter】使用BeanShell写入内容到文件

    使用BeanShell写入内容到文件 目录 使用BeanShell写入内容到文件 一.前言 二.提取 三.写入 一.前言 ​ 在我们日常工作中,可能会遇到需要将请求返回的数据写入到文件中.在我们使用J ...

  7. 小白python和pycharm安装大佬勿扰

    编程语言发展和Python安装 计算机语言的发展 机器语言 1946年2月14日,世界上第一台计算机ENIAC诞生,使用的是最原始的穿孔卡片.这种卡片上使用的语言是只有专家才能理解的语言,与人类语言差 ...

  8. CodeForces 1388D Captain Flint and Treasure

    题意 给长度为\(n\)的序列\(a[n]\)和\(b[n]\),初始时\(ans=0\),有以下操作: \(ans=ans+a[i]\) 如果\(b[i]\neq-1\),则\(a[b[i]]=a[ ...

  9. 文盘Rust——子命令提示,提高用户体验

    上次我们聊到 CLI 的领域交互模式.在领域交互模式中,可能存在多层次的子命令.在使用过程中如果全评记忆的话,命令少还好,多了真心记不住.频繁 --help 也是个很麻烦的事情.如果每次按 'tab' ...

  10. glog 日志库简介与测试【GO 常用的库】

    〇.前言 golang/glog 是 C++ 版本 google/glog 的 Go 版本实现,基本实现了原生 glog 的日志格式. 在 Kuberntes 中,glog 是默认日志库.因此需要详细 ...