博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1013: [JSOI2008]球形空间产生器sphere【高斯消元】
阅读量:5079 次
发布时间:2019-06-12

本文共 1363 字,大约阅读时间需要 4 分钟。

n+1个坐标可以列出n个方程,以二维为例,设圆心为(x,y),给出三个点分别是(a1,b1),(a2,b2),(a3,b3)

因为圆上各点到圆心的距离相同,于是可以列出距离方程
\[ (a1-x)^2+(b1-y)^2=(a2-x)^2+(b2-y)^2 \]
\[ (a1-x)^2+(b1-y)^2=(a3-x)^2+(b3-y)^2 \]
然后化简
\[ -2(a2-a1)x-2(b2-b1)y=a1^2-a2^2+b1^2-b2^2 \]
\[ -2(a3-a1)x-2(b3-b1)y=a1^2-a3^2+b1^2-b3^2; \]
然后就可以用高斯消元了

#include
#include
using namespace std;const int N=25;int n;double f[N],a[N][N],p;void gaosi(){ for(int i=1;i<=n;i++) { int nw=i; for(int j=i+1;j<=n;j++) if(a[j][i]>a[nw][i]) nw=j; for(int j=i;j<=n+1;j++) swap(a[nw][j],a[i][j]); for(int j=i+1;j<=n+1;j++) a[i][j]/=a[i][i]; a[i][i]=1; for(int j=i+1;j<=n;j++) { for(int k=i+1;k<=n+1;k++) a[j][k]-=a[j][i]*a[i][k]; a[j][i]=0; } } for(int i=n;i>=1;i--) for(int j=i+1;j<=n;j++) { a[i][n+1]-=a[i][j]*a[j][n+1]; a[i][j]=0; }}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lf",&f[i]); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%lf",&p); a[i][j]=2*(p-f[j]); a[i][n+1]+=p*p-f[j]*f[j]; } gaosi(); for(int i=1;i<=n;i++) printf("%.3lf ",a[i][n+1]); return 0;}

转载于:https://www.cnblogs.com/lokiii/p/9247047.html

你可能感兴趣的文章
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>
Abstract Factory Pattern
查看>>
list 容器 排序函数.xml
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
windows下编译FreeSwitch
查看>>
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>
c#自定义控件中的事件处理
查看>>
django Models 常用的字段和参数
查看>>
IOS--沙盒机制
查看>>
使用 JointCode.Shuttle 访问任意 AppDomain 的服务
查看>>
sqlite的坑
查看>>