题解【AcWing883】高斯消元解线性方程组
高斯消元模板题。
这里直接讲述一下高斯消元的算法流程:
- 枚举每一列 \(c\);
- 找到第 \(c\) 列绝对值最大的一行;
- 将这一行换到最上面;
- 将该行的第一个数变成 \(1\);
- 将下面所有行的第 \(c\) 列变成 \(0\)。
处理完后需要从最后一行往回迭代,求出每一个未知数的值。
#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-6; //浮点数误差
int n, m;
double a[103][103];
inline int gauss()
{
int c, r;
//c 为每次枚举的列,r 为当前处理的行
for (c = 0, r = 0; c < n; c+=1) //枚举每一列
{
int max_abs = r;
for (int i = r + 1; i < n; i+=1)
if (fabs(a[i][c]) > fabs(a[max_abs][c]))
max_abs = i; //找到第 c 列绝对值最大的一行
if (fabs(a[max_abs][c]) < eps) continue; //这一列所有数都是 0 就不用处理
for (int i = c; i <= n; i+=1) swap(a[max_abs][i], a[r][i]); //将这一行换到最上面
for (int i = n; i >= c; i-=1) a[r][i] /= a[r][c]; //将这一行的第 c 列变成 1,需要将这一行的所有数都除以第 c 列的数
for (int i = r + 1; i < n; i+=1) //将下面每一行的第 c 列变成 0
if (fabs(a[i][c]) > eps) //如果当前行的第 c 列大于 0
{
for (int j = n; j >= c; j-=1)
a[i][j] -= a[r][j] * a[i][c]; //进行消除
}
++r;
}
if (r < n)
{
for (int i = r; i < n; i+=1)
if (fabs(a[i][n]) > eps) return 2; //无解
return 1; //有无穷多组解
}
for (int i = n - 1; i >= 0; i-=1) //从下往上迭代
for (int j = i + 1; j < n; j+=1) //枚举原矩阵
a[i][n] -= a[j][n] * a[i][j]; //进行消除
return 0; //有唯一解
}
int main()
{
cin >> n;
for (int i = 0; i < n; i+=1)
for (int j = 0; j < n + 1; j+=1)
scanf("%lf", &a[i][j]);
int t = gauss();
if (t == 0) //有唯一解
for (int i = 0; i < n; i+=1) printf("%.2lf\n", a[i][n]);
else if (t == 1) //有无穷多组解
puts("Infinite group solutions");
else //无解
puts("No solution");
return 0;
}
题解【AcWing883】高斯消元解线性方程组的更多相关文章
- Widget Factory (高斯消元解线性方程组)
The widget factory produces several different kinds of widgets. Each widget is carefully built by a ...
- 【BZOJ】2466: [中山市选2009]树 高斯消元解异或方程组
[题意]给定一棵树的灯,按一次x改变与x距离<=1的点的状态,求全0到全1的最少次数.n<=100. [算法]高斯消元解异或方程组 [题解]设f[i]=0/1表示是否按第i个点的按钮,根据 ...
- bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)
http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...
- [置顶] hdu 4418 高斯消元解方程求期望
题意: 一个人在一条线段来回走(遇到线段端点就转变方向),现在他从起点出发,并有一个初始方向, 每次都可以走1, 2, 3 ..... m步,都有对应着一个概率.问你他走到终点的概率 思路: 方向问 ...
- 【高斯消元解xor方程】BZOJ1923-[Sdoi2010]外星千足虫
[题目大意] 有n个数或为奇数或为偶数,现在进行m次操作,每次取出部分求和,告诉你这几次操作选取的数和它们和的奇偶性.如果通过这m次操作能得到所有数的奇偶性,则输出进行到第n次时即可求出答案:否则输出 ...
- 【高斯消元解xor方程组】BZOJ2466-[中山市选2009]树
[题目大意] 给出一棵树,初始状态均为0,每反转一个节点的状态,相邻的节点(父亲或儿子)也会反转,问要使状态均为1,至少操作几次? [思路] 一场大暴雨即将来临,白昼恍如黑夜!happy! 和POJ1 ...
- poj1830(高斯消元解mod2方程组)
题目链接:http://poj.org/problem?id=1830 题意:中文题诶- 思路:高斯消元解 mod2 方程组 有 n 个变元,根据给出的条件列 n 个方程组,初始状态和终止状态不同的位 ...
- poj1753(高斯消元解mod2方程组)
题目链接:http://poj.org/problem?id=1753 题意:一个 4*4 的棋盘,初始时上面放满了黑色或白色的棋子.对 (i, j) 位置进行一次操作后 (i, j), (i + 1 ...
- hihocoder 第五十二周 高斯消元·二【高斯消元解异或方程 难点【模板】】
题目地址:http://hihocoder.com/contest/hiho57/problem/1 输入 第1..5行:1个长度为6的字符串,表示该行的格子状态,1表示该格子是亮着的,0表示该格子是 ...
随机推荐
- python--虚拟环境的使用
下载virtualenv # pip3 install virtualenv 创建虚拟环境(自定义虚拟环境名称为Aechery_env) # virtualenv -p python3 Archery ...
- cir from c# 托管堆和垃圾回收
1,托管堆基础 调用IL的newobj 为资源分配内存 初始化内存,设置其初始状态并使资源可用.类型的实列构造器负责设置初始化状态 访问类型的成员来使用资源 摧毁状态进行清理 释放内存//垃圾回收期负 ...
- 复制表结构创建分表 再设置自增ID
CREATE TABLE table_name1 LIKE table_name ALTER TABLE test AUTO_INCREMENT=x
- 通配符与标签!important的背景展示,也是让我怀疑人生了
是谁在耳边对我说!important提升权重优先级,只为这一句,我用了3600s研究通配符与标签!important的背景展示,也是让我怀疑人生了!选择器权值:标签选择器1,类选择器和伪类选择器:10 ...
- openlayers6结合geoserver实现地图矢量瓦片(附源码下载)
内容概览 1.基于openlayers6结合geoserver实现地图矢量瓦片2.源代码demo下载 效果图如下: 实现思路:利用Geoserver发布矢量切片服务,然后openlayers调用矢量瓦 ...
- 解决MySql客户端秒退(找不到my.ini)
问题说明(环境:windows7,MySql8.0) 今天安装好MySql后启动MySql服务-->启动服务都失败的就不要往下看了,自行百度解决. 打开客户端秒退,但在cmd中是可以使用数据库的 ...
- VLAN和子网之间的区别与联系
通常来说,子网和VLAN的相似之处在于它们都处理网络的一部分的分段或分区.但是,VLAN是数据链路层(OSI L2)的构造,而子网是网络层(OSI L3)的IP构造,它们解决网络上的不同问题.尽管在V ...
- bzoj3162独钓寒江雪
题意 \(n\)阶树,求本质不同的独立集个数 做法 重新编号后重心是不变的,如果有两个重心,可以加个虚点 用树哈希判子树有多少个相同的子树,设某种有\(k\)个,如果原本方案数为\(x\)个 则方案数 ...
- P2024 NOI2001 种类冰茶鸡
展开 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种, ...
- Photoshop Elements2020强势来袭,教你三秒钟拯救闭眼照
Photoshop Elements2020强势来袭,一系列的黑科技让设计师和路人都惊叹不已!若某人的闭眼成为一张集体照的败笔,那该如何挽回? 想要挽救闭眼照?听起来很高大上,很困难?不,Photos ...