于是去弄了个板子来

#include <bits/stdc++.h>
using namespace std;
#define int long long const int mod = 998244353;
const int N = 505; int qpow(int p,int q) {return ((q&1)?p:1) * (q?qpow(p*p%mod,q>>1):1) % mod;} int n, Q; // Input: a[][],n
// Method: build() modify(i,j,x)
// Output: inv[][], ans
struct matrix {
int a[N][N], st[N][N], inv[N][N], ans, n;
void build() {
ans=1;
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
st[i][j]=a[i][j];
}
}
for (int i = 1; i <= n; i++) inv[i][i] = 1;
for (int i = 1; i <= n; i++) {
for (int j = i; j <= n; j++) {
if (a[j][i]) {
for (int k = 1; k <= n; k++) {
swap(a[i][k], a[j][k]);
swap(inv[i][k], inv[j][k]);
}
if (j > i) ans = (mod - ans) % mod;
break;
}
}
int K = qpow(a[i][i], mod-2);
for (int j = i+1; j <= n; j++) {
int tmp = K * a[j][i] % mod;
for (int k = 1; k <= n; k++) {
a[j][k] = (a[j][k] + mod - tmp * a[i][k] % mod) % mod;
inv[j][k] = (inv[j][k] + mod - tmp * inv[i][k] % mod) % mod;
}
}
}
for (int i = n; i >= 1; i--) {
int K = qpow(a[i][i], mod-2);
ans = ans * a[i][i] % mod;
for (int j = 1; j <= n; j++) {
a[i][j] = a[i][j] * K % mod;
inv[i][j] = inv[i][j] * K % mod;
}
for (int j = 1; j < i; j++) {
int tmp = a[j][i];
for (int k = 1; k <= n; k++) {
a[j][k] = (a[j][k] + mod - tmp * a[i][k] % mod) % mod;
inv[j][k] = (inv[j][k] + mod - tmp * inv[i][k] % mod) % mod;
}
}
}
}
void modify(int x,int y,int z) {
int t = (z + mod - st[x][y]) % mod;
st[x][y] = z;
for (int i = 1; i <= n; i++) {
a[i][y] = (a[i][y] + t * inv[i][x] % mod) % mod;
}
{
int i = y;
int K = qpow(a[i][i], mod-2);
ans = ans * a[i][i] % mod;
for (int j = 1; j <= n; j++) {
a[i][j] = a[i][j] * K % mod;
inv[i][j] = inv[i][j] * K % mod;
}
for (int j = 1; j <= n; j++) {
if (j == i) continue;
int tmp = a[j][i];
for (int k = 1; k <= n; k++) {
a[j][k] = (a[j][k] + mod - tmp * a[i][k] % mod) % mod;
inv[j][k] = (inv[j][k] + mod - tmp * inv[i][k] % mod) % mod;
}
}
}
}
} mat; signed main() {
scanf("%d%d", &n, &Q);
mat.n = n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
scanf("%d", &mat.a[i][j]);
}
}
mat.build(); while(Q--) {
int t1,t2,t3;
scanf("%d%d%d", &t1, &t2, &t3);
mat.modify(t1,t2,t3);
printf("%d\n", mat.ans);
}
} /*
2 3
0 1
1 0
1 1 1
2 1 2
2 2 1
[Output]
998244352
998244351
998244352
*/

Wannafly Winter Camp 2020 Day 7D 方阵的行列式 - 数学的更多相关文章

  1. Wannafly Winter Camp 2020 Day 7E 上升下降子序列 - 数学

    神奇公式 #include <bits/stdc++.h> using namespace std; #define int long long int n,mod,c[205][205] ...

  2. Wannafly Winter Camp 2020 Day 7A 序列 - 树状数组

    给定一个全排列,对于它的每一个子序列 \(s[1..p]\),对于每一个 \(i \in [1,p-1]\),给 \(s[i],s[i+1]\) 间的每一个值对应的桶 \(+1\),求最终每个桶的值. ...

  3. Wannafly Winter Camp 2020 Day 6J K重排列 - dp

    求 \(K\) 是多少个 \(n\) 元置换的周期.\(T\leq 100, n\leq 50, K \leq 10^{18}\) Solution 置换可以被试做若干个环组成的有向图,于是考虑 dp ...

  4. Wannafly Winter Camp 2020 Day 6I 变大! - dp

    给定一个序列,可以执行 \(k\) 次操作,每次选择连续的三个位置,将他们都变成他们的最大值,最大化 \(\sum a_i\) 需要对每一个 \(k=i\) 输出答案 \(n \leq 50, a_i ...

  5. Wannafly Winter Camp 2020 Day 6H 异或询问 - 二分

    给定一个长 \(n\) 的序列 \(a_1,\dots,a_n\),定义 \(f(x)\) 为有多少个 \(a_i \leq x\) 有 \(q\) 次询问,每次给定 \(l,r,x\),求 \(\s ...

  6. Wannafly Winter Camp 2020 Day 6G 单调栈 - 贪心

    对于排列 \(p\),它的单调栈 \(f\) 定义为,\(f_i\) 是以 \(p_i\) 结尾的最长上升子序列的长度 先给定 \(f\) 中一些位置的值,求字典序最小的 \(p\) 使得它满足这些值 ...

  7. Wannafly Winter Camp 2020 Day 6D 递增递增 - dp,组合数学

    给定两个常为 \(n\) 的序列 \(l_i,r_i\),问夹在它们之间 ( \(\forall i, l_i \leq a_i \leq r_i\) ) 的不降序列的元素总和. Solution 先 ...

  8. Wannafly Winter Camp 2020 Day 6C 酒馆战棋 - 贪心

    你方有 \(n\) 个人,攻击力和血量都是 \(1\).对方有 \(a\) 个普通人, \(b\) 个只有盾的,\(c\) 个只有嘲讽的,\(d\) 个有盾又有嘲讽的,他们的攻击力和血量都是无穷大.有 ...

  9. Wannafly Winter Camp 2020 Day 6A Convolution - NTT

    求 \(\sum_{i=1}^n \sum_{j=1}^n 2^{a_ia_j}\) Solution 化简一下 \[ 2^{a_ia_j} = p^{(a_i+a_j)^2-a_i^2-a_j^2} ...

随机推荐

  1. QT透明显示文字

    实现效果: 代码: #ifndef IMAGINIST_H #define IMAGINIST_H #include <QtWidgets/QWidget> #include <Qt ...

  2. Pycharm学习记录---注释

    在方法下面添加三个双引号然后回车即可添加参数注释

  3. node.js+express+mongoose实现用户增删查改案例

    node.js+express+mongodb对用户进行增删查改 一.用到的相关技术 使用 Node.js 的 express 框架搭建web服务 使用 express 中间件 body-parse ...

  4. centos 7安装reids

    一.reids下载  下载地址: https://redis.io/ 二.解压安装 ① 解压:tar -zxvf redis-5.0.5.tar.gz ② 安装环境:yum install gcc-c ...

  5. vue学习(二)模板页配置(bootstrap)

    1.替换我们的显示页面 删除components下的所有文件,新建模板页文件夹 layout. //Layout.vue <template> <div> <header ...

  6. Spring Bean几种注入方式——setter(常用),构造器,注入内部Bean,注入集合,接口...

    依赖注入分为三种方式: 1.1构造器注入 构造器通过构造方法实现,构造方法有无参数都可以.在大部分情况下我们都是通过类的构造器来创建对象,Spring也可以采用反射机制通过构造器完成注入,这就是构造器 ...

  7. 使用 pyenv 管理不同的 Python 版本

    1. pyenv 的安装 $ yum install git -y $ yum install gcc make patch gdbm-devel openssl-devel sqlite-devel ...

  8. SELinux 和 iptables 开启关闭

    SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制(MAC)系统.对于目前可用的 Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MA ...

  9. 【转载】python_logging模块

    原文:https://www.cnblogs.com/liujiacai/p/7804848.html 1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志 ...

  10. React中ref的使用

    直接获取DOM元素时使用的,一般情况下尽量不要使用ref