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

思路来源:一个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-29 MySql进阶

    Alter的使用: 列的增加和删减 alter table users add user_name VARCHAR(100);#添加一列在末尾 SELECT * from users; alter t ...

  2. BTC中的数据结构

    BTC中的数据结构 普通指针 普通指针存储的是某个结构体在内存中的地址(假如P是指向一结构体的指针,那么P里面存放的就是该结构体在内存中的起始位置) Hash pointer(哈希指针) 对于如下的节 ...

  3. 【go笔记】使用标准库flag解析命令行参数

    前言 Go语言标准库中提供了一个包flag可以解析命令行参数. 示例代码:文件读取 package main import ( "fmt" "flag" &qu ...

  4. linux cat查看文件使用grep实现多条件多场景过滤

    转载请注明出处: 在实际应用过程中,我们查看日志文件时,经常会根据一定自定义的词语过滤,查看所有相关的数据行.最近遇到用cat查看文件,需要根据多关键词进行不同的场景过滤,在这里进行一个简单的总结: ...

  5. 《SQL与数据库基础》06. 函数

    目录 函数 字符串函数 数值函数 日期函数 流程函数 本文以 MySQL 为例 函数 函数是指一段可以直接被另一段程序调用的程序或代码. 要查看函数操作的结果,可以使用 SELECT 函数(参数); ...

  6. Vue【原创】基于【日历组件Calendar】的【节假日管理】功能整合

    基于日历组件(lilo-calendar)的节假日管理功能整合. 效果图: 完整代码: 1 <template> 2 <div class="root-calendar&q ...

  7. KRPano动态热点专用素材图50多个,加动态热点使用方法

    KRPano动态热点专用素材是一种特定形式的序列图,该序列图要求帧的水平和垂直的具体位置必须准确,否则图的动作将会出现错乱,KRPano不支持动态图.目前网上比较匮乏动态热点素材,在此亲手整理制作了5 ...

  8. RabbitMQ入门实践

    一.概述: 大多应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦能力. 1.消息服务中两个重要概念: 消息代理(message broker)和目的地(destination)当消息发送者发送 ...

  9. 每日一库:lumberjack -- 日志轮换和管理

    在开发应用程序时,记录日志是一项关键的任务,以便在应用程序运行时追踪问题.监视性能和保留审计记录.Go 语言提供了灵活且强大的日志记录功能,可以通过多种方式配置和使用.其中一个常用的日志记录库是 gi ...

  10. Springboot优雅参数校验,统一响应,异常处理

    1.统一响应 (1)统一状态码 首先定义一个状态码接口,所有状态码都需要实现它 public interface StatusCode { public int getCode(); public S ...