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

思路来源:一个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-7-12 VUE的生命周期

    挂载: beforeCreate created beforeMount mounted:el挂载到实例上时运行 更新: beforeUpdate updated 销毁: beforeDestory ...

  2. node.js中kafka的封装和高并发消费限流优雅降级以及egg-kafka的封装说明

    HI!,你好,我是zane,zanePerfor是一款我开发的一个前端性能监控平台,现在支持web浏览器端和微信小程序端. 我定义为一款完整,高性能,高可用的前端性能监控系统,这是未来会达到的目的,现 ...

  3. 加密算法解析:MD5、DES和RAS的工作原理与特点

    一.MD5不可逆加密 1.1-理解MD5 MD5公开的算法,任何语言实现后其实都是一样的.通用的 不可逆加密:原文--加密--密文,密文无法解密出原文 1.2-MD5封装 using System.I ...

  4. Wow: 基于 DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架

    领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 架构图 事件源 可观测性 OpenAPI (Spring WebFlux 集成) 自动注册 命 ...

  5. [nginx]日志中记录自定义请求头

    前言 假设在请求中自定义了一个请求头,key为"version",参数值为"1.2.3",需要在日志中捕获这个请求头. nginx日志配置 只需要用变量http ...

  6. 如何实现Excel中的多级数据联动

    摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在类Excel表格应用中,常用的需求场景是根据单元格之间 ...

  7. 11、Spring之基于注解的AOP

    11.1.环境搭建 创建名为spring_aop_annotation的新module,过程参考9.1节 11.1.1.配置打包方式和依赖 注意:AOP需要在IOC的基础上实现,因此需要导入IOC的依 ...

  8. 论文解读(PERL)《PERL: Pivot-based Domain Adaptation for Pre-trained Deep Contextualized Embedding Models》

    Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:PERL: Pivot-based Domain Adaptation for Pre-trained D ...

  9. WPF学习 - 闭坑(持续更新)

    坑1:自定义控件设计原则: 既然称之为控件,那么就必定有界面与行为两部分. 界面就是展示给用户看的,用于承载类的属性.方法.事件等. 行为就是类的方法,以及这些方法需要用到的属性.字段等. WPF设计 ...

  10. iOS开发过程中的内存监控