HihoCoder.1195 高斯消元·一 (高斯消元 浮点类型)
2017-08-16 12:48
267 查看
HihoCoder.1195 高斯消元·一 (高斯消元 浮点类型)
标签(空格分隔): 高斯消元题意分析
还是裸题,但是就是过不了。一开始是用的int类型的,死活过不去,然后讨论得知需要用double类型的,网上都是一些什么野鸡板子,怎么也过不去。
这些模板类的还是要自己手写一遍,才知道怎么回事。
代码总览
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> using namespace std; const int N = 1010; const double EPS=1e-7; int m,n; double a ,x ; void print(){ for (int i=0;i<m;i++){ for (int j=0;j<=n;j++) printf("%d ",a[i][j]); puts(""); } puts(""); } int Gauss(int m,int n){ int col=0, k=0;//col为列号,k为行号 for (;k<m&&col<n;++k,++col){ int r = k; for (int i=k+1;i<m;++i) if(fabs(a[i][col])>fabs(a[r][col]))r=i; if (fabs(a[r][col])<EPS){k--;continue;}//列全为0 if (r!=k)for(int i=col;i<=n;++i) swap(a[k][i],a[r][i]); for (int i=k+1;i<m;++i)//消元 if(fabs(a[i][col])>EPS){ double t = a[i][col]/a[k][col]; for (int j=col;j<=n;j++)a[i][j]-=a[k][j]*t; a[i][col] = 0; } } for(int i=k ;i<m ;++i)//无解 if (fabs(a[i] )>EPS) return -1; if (k < n) return n - k; //自由元个数 for (int i =n-1; i>=0; i--){//回带求解 double temp = a[i] ; for (int j=i+1; j<n; ++j) temp -= x[j] * a[i][j]; x[i] = (temp / a[i][i]); } return 0; } int main(){ 4000 //freopen("fuck.in","r",stdin); for (;~scanf("%d%d",&n,&m);){ for (int i=0;i<m;i++) for(int j=0;j<=n;j++)scanf("%lf",&a[i][j]); int k = Gauss(m,n); if (k<0) puts("No solutions"); else if (k>0) puts("Many solutions"); else for (int i=0;i<n;i++) printf("%d\n",(int)(x[i]+0.5)); } return 0; }
相关文章推荐
- 高斯消元整数版和浮点数版实现
- hdu 3976 Electric resistance 高斯消元(浮点满秩模板)
- 【高斯消元】浮点高斯消元
- 高斯_约当消元(浮点)
- 高斯消元-浮点数
- HDU3359:Kind of a Blur(高斯消元 & 浮点数)
- [高斯消元必有解的浮点模板] hdu 3359 Kind of a Blur
- 高斯消元求期望 Random Walk (浮点数Gauss模板 挑战P288)
- 高斯消元解行列式
- 高斯消元模板
- bzoj 1770: [Usaco2009 Nov]lights 燈 (高斯消元)
- poj 1681 Painter's Problem(高斯消元)
- 【BZOJ2707】[SDOI2012]走迷宫 Tarjan+拓扑排序+高斯消元+期望
- HDU 5755 Gambler Bo(高斯消元解同余方程)
- HDU3364(高斯消元开关问题)(模板)
- java浮点类型float精度与Double精度范围实例使用说明
- Light OJ 1272 Maximum Subset Sum 高斯消元 最大XOR值
- [高斯消元] BZOJ3640: JC的小苹果
- C语言编程【三】 初步整型和浮点类型。
- ACM 高斯消元(模板)