【BZOJ1013】球形空间产生器,第一次的高斯消元
2016-08-18 20:56
423 查看
Time:2016.08.18
Author:xiaoyimi
转载注明出处谢谢
传送门
思路:
板子高斯消元
根据球的方程(x−a)2+(y−b)2+...=r2与给出的n+1个坐标
,逐次相减后消去未知数的二次项,可以得到n个n元一次方程
具体过程大家可以自己在纸上写写
注意:无
代码:
Author:xiaoyimi
转载注明出处谢谢
传送门
思路:
板子高斯消元
根据球的方程(x−a)2+(y−b)2+...=r2与给出的n+1个坐标
,逐次相减后消去未知数的二次项,可以得到n个n元一次方程
具体过程大家可以自己在纸上写写
注意:无
代码:
#include<cstdio> #include<iostream> #include<cmath> using namespace std; int n; double f[12][12],P[12][12],ans[11]; void gauss() { double p; int t; for (int i=1;i<n;++i) { t=i; for (int j=i+1;j<=n;++j) if (fabs(f[j][i])>fabs(f[t][i])) t=j; for (int j=i;j<=n+1;++j) swap(f[i][j],f[t][j]); for (int j=i+1;j<=n;++j) { p=f[j][i]/f[i][i]; for (int k=i+1;k<=n+1;++k) f[j][k]-=f[i][k]*p; } } for (int i=n;i;--i) { p=0; for (int j=i+1;j<=n;++j) p+=f[i][j]*ans[j]; ans[i]=(f[i][n+1]-p)/f[i][i]; } } main() { scanf("%d",&n); for (int i=1;i<=n+1;++i) for (int j=1;j<=n;++j) scanf("%lf",P[i]+j); for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) f[i][j]=2*(P[i][j]-P[i+1][j]), f[i][n+1]+=P[i][j]*P[i][j]-P[i+1][j]*P[i+1][j]; gauss(); for (int i=1;i<=n;i++) printf("%.3lf%c",ans[i]," \n"[i==n]); }
相关文章推荐
- BZOJ 1013 球形空间产生器sphere(高斯消元)
- BZOJ 1013 JSOI2008 球形空间产生器sphere 高斯消元
- [BZOJ1013][JSOI2008]球形空间产生器sphere(高斯消元)
- 【高斯消元】BZOJ1013(JSOI2008)[球形空间产生器sphere]题解
- bzoj1013 [JSOI2008] 球形空间产生器sphere 高斯消元
- [BZOJ1013][JSOI2008]球形空间产生器sphere-高斯消元
- BZOJ1013 [JSOI2008]球形空间产生器sphere(高斯消元)
- bzoj 1013: [JSOI2008]球形空间产生器sphere 高斯消元
- BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元
- bzoj1013球形空间产生器 高斯消元板子题
- [BZOJ 1013][JSOI2008]球形空间产生器sphere:高斯消元
- BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元
- [BZOJ1013][JSOI2008]球形空间产生器sphere(高斯消元)
- BZOJ 1013 JSOI2008 球形空间产生器sphere 高斯消元
- bzoj 1013 [JSOI2008]球形空间产生器sphere(高斯消元)
- 【BZOJ 1013】 [JSOI2008]球形空间产生器sphere 高斯消元
- 球形空间产生器 bzoj 1013 高斯消元
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere(高斯消元)
- [BZOJ 1013][JSOI 2008] 球形空间产生器sphere 题解(高斯消元)
- BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元