首页 > 其他分享 >Luogu P3389【模板】高斯消元法

Luogu P3389【模板】高斯消元法

时间:2022-10-08 15:48:10浏览次数:59  
标签:系数 Luogu 高斯消 主元 leq P3389 题解 元法

题意

给定一个线性方程组,对其求解。

$1 \leq n \leq 100, \left | a_i \right| \leq {10}^4 , \left |b \right| \leq {10}^4 $

题解

因为之前贺题解的时候没有理解高斯-约当消元法的实际意义所以滚回来复习了。

绝对不是因为被期望 DP 撅了才来的。

贺一下题解区的讲解。

相对于传统的高斯消元,约旦消元法的精度更好、代码更简单,没有回带的过程。

约旦消元法大致思路如下:

1.选择一个尚未被选过的未知数作为主元,选择一个包含这个主元的方程。

2.将这个方程主元的系数化为1。

3.通过加减消元,消掉其它方程中的这个未知数。

4.重复以上步骤,直到把每一行都变成只有一项有系数。

我们用矩阵表示每一项系数以及结果。

提几个要点。

1.从第一项开始枚举主元,然后选取所有行中主元系数绝对值最大的哪个。方便确认无解——若该项绝对值最大的都是 0,意味着这个主元的系数全都是 0,有无穷解。

2.选取完最大的那个之后直接将最大的作为当前行,方便后续打印方案与卡常。

3.消元直接从主元 +1 项开始。因为我们知道前面的项已经被消没了,主元项减完肯定是 0,完全不用管了。

4.最后打印的时候记得让常数项除上主元的系数。

const ll maxn=105;
db f[maxn][maxn];
ll n;
bool check(db x){
	if(fabs(x)<=1e-8)return 1;
	return 0;
}
void solve(){
	n=R;
	for(ll i=1;i<=n;i++){
		for(ll j=1;j<=n+1;j++){
			f[i][j]=1.0*R;
		}
	}
	for(ll i=1;i<=n;i++){
		ll cur=i;
		for(ll j=i+1;j<=n;j++){
			if(fabs(f[j][i])>fabs(f[cur][i]))cur=j;
		}
		for(ll j=1;j<=n+1;j++)swap(f[i][j],f[cur][j]);
		if(check(f[i][i])){
			cout<<"No Solution"<<endl;
			return ;
		}
		for(ll j=1;j<=n;j++){
			if(j==i)continue;
			db inv=f[j][i]/f[i][i];
			for(ll k=i+1;k<=n+1;k++){
				f[j][k]-=inv*f[i][k];
			}
		}
	}
	for(ll i=1;i<=n;i++){
		printf("%.2lf\n",f[i][n+1]/f[i][i]);
	}
	return ;
}

奥义·混沌邪恶·cout+快读+printf·魔怔人

标签:系数,Luogu,高斯消,主元,leq,P3389,题解,元法
From: https://www.cnblogs.com/rnfmabj/p/luogup3389.html

相关文章

  • LuoguP3377 【模板】左偏树(可并堆)
    题意如题,一开始有\(n\)个小根堆,每个堆包含且仅包含一个数。接下来需要支持两种操作:1xy:将第\(x\)个数和第\(y\)个数所在的小根堆合并(若第\(x\)或第\(y\)个......
  • luogu P6155 修改题解
    P6155题解闲话这是本蒟蒻写的第三篇题解了,前两篇都因为种种原因报废了,求管理过╥﹏╥正片大家好,我是一名STL选手,于是我用了大量STL+O2的代码过了这道题分析我的代码与......
  • luogu P3571 [POI2014]SUP-Supercomputer
    题面传送门感觉考场上不一定做得出来的题目?首先我们可以得到每个点的深度,然后猜测这个只和每个层的深度有关。我们考虑这样一个贪心:对于每一层的每个点,如果这个点有子节......
  • luogu P3822 [NOI2017] 整数
    Link题解这里有一个很傻逼的无脑做法:https://www.luogu.com.cn/blog/80614/solution-p3822正常的正解做法是考虑用线段树维护每一位是什么,然后将\(a\)拆成二进制位,对......
  • luogu P3644 [APIO2015] 八邻旁之桥
    Link题解首先忽略掉同侧的询问。对于\(K=1\),它其实就是问一个点到其它点的距离之和最小值,直接找到中位数然后计算即可。对于一条路线,我们可以发现,如果建的桥里这两个......
  • 异或方程组高斯消元模板
    inlinevoidsolve(intn){for(inti=1,top=1;i<=n;i++,top++){intcur=0;for(intj=top;j<=n;j++)if(m......
  • 【luogu P5906】【模板】回滚莫队&不删除莫队
    【模板】回滚莫队&不删除莫队题目链接:luoguP5906题目大意给你一个序列,多次询问每次问一个区间,求里面相同的数的最远间隔距离。思路考虑莫队,发现加入一个点好处理,但是......
  • luogu P4183 [USACO18JAN]Cow at Large P
    题面传送门奇妙的题目。首先我们可以得出当\(u\)点为根的时候\(i\)点是否可以被控制:设\(g_i\)表示\(i\)号点到最近的叶子距离,则当$g_i\geqdist(u,i)\(时\)u\(子树内的......
  • [补档]高斯消元做题记录/或曰 学习笔记
    早就退役啦!乍一看挺水的。P2455[SDOI2006]线性方程组板子题。codeP4035[JSOI2008]球形空间产生器给定一个\(n\)维的球体上\(n+1\)个点的坐标\(a_{i,j}\)。求......
  • Luogu P5089 [eJOI2018] 元素周期表 题解
    (从洛谷博客搬过来的)这道题嘛..主要还是找性质推规律。拿到题,第一眼:噢噢爆搜啊。第二眼:噢噢贪心啊。第三眼:很好贪心假了。然后苦思冥想半个小时去看题解。看到兔队的......