Template -「高斯消元」
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
double Abs(double x) { return x < 0 ? -x : x; }
double Max(double x, double y) { return x > y ? x : y; }
double Min(double x, double y) { return x < y ? x : y; }
int read() {
int x = 0, k = 1;
char s = getchar();
while (s < '0' || s > '9') {
if (s == '-')
k = -1;
s = getchar();
}
while ('0' <= s && s <= '9') {
x = (x << 3) + (x << 1) + (s ^ 48);
s = getchar();
}
return x * k;
}
void write(int x) {
if (x < 0) {
putchar('-');
x = -x;
}
if (x > 9)
write(x / 10);
putchar(x % 10 + '0');
}
void print(int x, char c) {
write(x);
putchar(c);
}
const int MAXN = 5e2 + 5;
const int MAXM = 3e5 + 5;
struct Elimination {
bool free[MAXN];
int n, m, rk, opt;
double a[MAXN][MAXN], x[MAXN], eps;
Elimination() { eps = 1e-12; }
Elimination(int N, int M) {
n = N;
m = M;
}
double Abs(double x) { return x < eps ? -x : x; }
void Swap(double &x, double &y) {
double t = x;
x = y;
y = t;
}
void clear() {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) a[i][j] = 0;
}
void calc() {
int r = 1, c = 1;
for (; r <= n && c <= m; r++, c++) {
int pos = r;
for (int i = r + 1; i <= n; i++)
if (Abs(a[i][c]) > Abs(a[pos][c]))
pos = i;
if (Abs(a[pos][c]) < eps) {
r--;
continue;
}
if (pos != r)
for (int i = c; i <= m; i++) Swap(a[r][i], a[pos][i]);
double t;
for (int i = 1; i <= n; i++)
if (i != r && Abs(a[i][c]) > eps) {
t = a[i][c] / a[r][c];
for (int j = m; j >= c; j--) a[i][j] -= t * a[r][j];
}
}
rk = r;
}
void check() {
opt = 1;
for (int i = 1; i <= n; i++)
if (Abs(a[i][i]) < eps && Abs(a[i][m]) > eps) {
opt = -1;
return;
}
for (int i = 1; i <= n; i++)
if (Abs(a[i][i]) < eps && Abs(a[i][m]) < eps) {
free[i] = true;
opt = 0;
} else
x[i] = a[i][m] / a[i][i];
}
};
Template -「高斯消元」的更多相关文章
- 「ZOJ 1354」Extended Lights Out「高斯消元」
题意:给定一个\(5\times 6\)的棋盘的\(01\)状态,每次操作可以使它自己和周围四个格子状态取反,求如何操作,输出一个\(01\)矩阵 题解:这题可以通过枚举第一行的状态然后剩下递推来做, ...
- 「BZOJ 3270」博物馆「高斯消元」
应该算高斯消元经典题了吧. 题意:一个无向连通图,有两个人分别在\(s,t\),若一个人在\(u\),每一分钟有\(p[u]\)的概率不动,否则随机前往一个相邻的结点,求在每个点相遇的概率 题解: 首 ...
- BZOJ3601. 一个人的数论(狄利克雷卷积+高斯消元)及关于「前 $n$ 个正整数的 $k$ 次幂之和是关于 $n$ 的 $k+1$ 次多项式」的证明
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3601 题解 首先还是基本的推式子: \[\begin{aligned}f_d(n) &a ...
- loj2542 「PKUWC2018」随机游走 MinMax 容斥+树上高斯消元+状压 DP
题目传送门 https://loj.ac/problem/2542 题解 肯定一眼 MinMax 容斥吧. 然后问题就转化为,给定一个集合 \(S\),问期望情况下多少步可以走到 \(S\) 中的点. ...
- LOJ 2542 「PKUWC2018」随机游走 ——树上高斯消元(期望DP)+最值反演+fmt
题目:https://loj.ac/problem/2542 可以最值反演.注意 min 不是独立地算从根走到每个点的最小值,在点集里取 min ,而是整体来看,“从根开始走到点集中的任意一个点就停下 ...
- LG3389 「模板」高斯消元法 高斯消元
问题描述 LG3389 题解 高斯消元,是用来解\(n\)元一次方程组的算法,时间复杂度\(O(n^3)\) 这样就构造出了这个方程组的矩阵 目标就是把这个矩阵左边\(n \times n\)消为单位 ...
- LG2447/BZOJ1923 「SDOI2010」外星千足虫 高斯消元
问题描述 LG2447 BZOJ1923 题解 显然是一个高斯消元,但是求的东西比较奇怪 发现这个方程组只关心奇偶性,于是可以用一个\(\mathrm{bitset}\)进行优化,用xor来进行消元操 ...
- 「中山纪中集训省选组D4T1」折射伤害 高斯消元
题目描述 在一个游戏中有n个英雄,初始时每个英雄受到数值为ai的伤害,每个英雄都有一个技能"折射",即减少自己受到的伤害,并将这部分伤害分摊给其他人.对于每个折射关系,我们用数对\ ...
- UVA11542 Square(高斯消元 异或方程组)
建立方程组消元,结果为2 ^(自由变元的个数) - 1 采用高斯消元求矩阵的秩 方法一: #include<cstdio> #include<iostream> #includ ...
随机推荐
- Linux下安装部署NodeJS完整步骤
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ NodeJS是一个开源,跨平台,轻量级的JavaScript运行时环境,可用于构建可扩展的网络 ...
- 如何使用Shell写一个显示目录结构的命令?
公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 在Linux中使用Shell写一个显示目录结构的命令,快速寻找目录结构. 1.代码 #!/usr/bin/env bash ...
- UDP协议,多道技术,进程,同步与异步,阻塞与非阻塞
UDP协议 简介 UDP叫做用户数据报协议,是OSI七层参考模型中传输层使用的协议,他提供的是不可靠传输,既它在传输过程 中不保证数据的完整性! 端口号 UDP使用IP地址和端口号进行标识,以此将数据 ...
- 从 rails 窥探 web 全栈开发(零)
从 rails 窥探 web 全栈开发(零) 本文将讲述在学习之前几个必须要知道的概念,这些词汇在 rails 中都会出现. 本文前置条件:安装好 Ruby. 从 rails 窥探 web 全栈开发( ...
- 多线程07:async、future、packaged_task、promise
async.future.packaged_task.promise 本节内容需要包含头文件:#include <future> 一.std::async. std::future 创建后 ...
- unity---小地图制作
脚本控制移动 public float moveSpeed =5f; public float roundSpeed=120f; void Update() { this.transform.Tran ...
- unity---摄像机参数
2D游戏一般选择填充,减少性能浪费,也一般选择正交模式 Fiel of View 类似望远镜的效果 Clipping Planes 摄像机开始摄像和结束,两个平面的位置 Depth 决定摄像头的优先级 ...
- Blazor和Vue对比学习(进阶2.1.1):生命周期,基本理解和使用
一.基本理解 首次接触"生命周期"这个名词,是比较晦涩的,Vue中又有生命周期钩子,而Blazor则是虚方法重写,容易蒙.所以,我尝试从初学者的角度来阐述一下. 1.我们在基础部分 ...
- 深入解读SQL的聚集函数
摘要:本文从基本聚集操作入手,介绍常用的SQL语法,以及一些扩展的聚集功能,同时会讲到在GaussDB(DWS)里聚集相关的一些优化思路. 本文分享自华为云社区<GaussDB(DWS) SQL ...
- 从头创建一个新的vue项目------用npm|yarn下载vue-cli|vue-ui创建vue
1.下载node或者是nvm node可以直接去node官网下载,http://nodejs.cn/,默认是长期维护的版本 如果想管理node的版本,可以下载nvm.这个是可选的.但是作为一个前端工程 ...