高斯消元&&luogu3389
高斯消元(Gauss)
高斯消元和我们做二元一次方程组差不多
流程:
1.把系数和右边的值就是用二维数组存下来->转化成矩阵
我们的目标是把这个矩阵装换成 上三角的形式
对角线系数全部为1,1下面都为0,为了下面的回带
2.利用 加减消元和等式两边除以一个数,一列一列的进行消元
顺便判断一下是否有解,对角线上系数不为0
3.求出上三角之后,我们倒着回代一下就可以求取解了
当选取主元的时候,由于是double类型,当对角线的系数太小时,此时用它做除数会带来误差扩散,使结果严重失真。所以我们在消元的过程中,如果出现主元相差较大,要选取最大数作为主元,并交换行列,(当然,消元完毕的上边不能考虑在内)
---参考数学一本通
代码
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std; const double eps=1e-;
int n;
double a[][];
double ans[]; int main()
{
scanf("%d",&n);
for(int i=; i<=n; ++i)
for(int j=; j<=n+; ++j)
scanf("%lf", &a[i][j]); for(int i=; i<=n; ++i) {
int pivot=i;
for(int j=i+; j<=n; ++j)//选取较大主元
if(fabs(a[j][i]) > fabs(a[pivot][i])) pivot=j;
if(abs(a[pivot][i]) < eps) { //判断有无解,无穷解也当做无解
printf("No Solution");
return ;
}
if(pivot!=i) swap(a[i],a[pivot]);//直接交换
double tmp=a[i][i];
for(int j=i; j<=n+; ++j) {
a[i][j]/=tmp;//系数化为1
}
for(int j=i+;j<=n;j++) {//下面的化为0
tmp=a[j][i];
for(int k=i;k<=n+;k++) {
a[j][k]-=a[i][k]*tmp;
}
}
}
ans[n]=a[n][n+];
for(int i=n-; i>=; i--) {
ans[i]=a[i][n+];
for(int j=i+; j<=n; ++j)
ans[i]-=a[i][j]*ans[j];
}//回带
for(int i=;i<=n;++i)
printf("%.2lf\n",ans[i]);
}
高斯消元&&luogu3389的更多相关文章
- 【BZOJ-3143】游走 高斯消元 + 概率期望
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2264 Solved: 987[Submit][Status] ...
- 【BZOJ-3270】博物馆 高斯消元 + 概率期望
3270: 博物馆 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 292 Solved: 158[Submit][Status][Discuss] ...
- *POJ 1222 高斯消元
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9612 Accepted: 62 ...
- [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...
- hihoCoder 1196 高斯消元·二
Description 一个黑白网格,点一次会改变这个以及与其连通的其他方格的颜色,求最少点击次数使得所有全部变成黑色. Sol 高斯消元解异或方程组. 先建立一个方程组. \(x_i\) 表示这个点 ...
- BZOJ 2844 albus就是要第一个出场 ——高斯消元 线性基
[题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i ...
- SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元
[题目分析] Matrix-Tree定理+高斯消元 求矩阵行列式的值,就可以得到生成树的个数. 至于证明,可以去看Vflea King(炸树狂魔)的博客 [代码] #include <cmath ...
- UVALive 7138 The Matrix Revolutions(Matrix-Tree + 高斯消元)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...
- [高斯消元] POJ 2345 Central heating
Central heating Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 614 Accepted: 286 Des ...
随机推荐
- 安装JIRA
参考链接:https://www.cnblogs.com/houchaoying/p/9096118.html mysql-connector插件下载: https://mvnrepository.c ...
- [py]flask从0到1-模板/增删改查
flask知识点 1.后端渲染html到前端 render_template 2.后端获取前端数据 request.args.get 3.前端获取后端数据 模板 4.警示消息 flash {{ get ...
- [py]django模板继承
参考 1.展示arr,d等数据类型 2.逻辑for if / url获取 3.获取内置变量 django模板继承 通过搞一个base.html 这个base.html可以包含两类 block片断 其他 ...
- 小P的故事——神奇的换零钱&&人活着系列之平方数
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2777&cid=1219 这题不会,看了别人的代码 #include <iostre ...
- python输入与输出165
s = 'Hello,Runoob' print(s) str(s) print(s) print(repr(s)) print(1/7) print(str(1/7)) print(repr(1/7 ...
- 记两个国外CTF的弱pwn
两道题都来自CSAW CTF 18.PWN学得不够多,如果哪里错了,欢迎留言交流. 第一个题 get_it checksec检查之后,发现栈保护没开,很可能是栈溢出.IDA打开F5看伪源码. int ...
- [LeetCode] 298. Binary Tree Longest Consecutive Sequence_Medium tag: DFS recursive
Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...
- Linux sendmail
最近在写自动化巡检脚本,想着怎么预警后自动发送邮件报警. 首先下载最新版本mailx-12.4.tar.bz2 # wget http://sourceforge.net/projects/heirl ...
- sqlplus与shell互相传值的几种情况
2578人阅读 sqlplus与shell互相传值的几种情况 情况一:在shell中最简单的调用sqlplus $cat test.sh #!/bin/sh sqlplus oracle/orac ...
- Selenium - Css Selector 使用方法
什么是Css Selector? Css Selector定位实际就是HTML的Css选择器的标签定位 工具 Css Selector可以下载火狐浏览器插件,FireFinder 或 FireBug和 ...