洛谷题目传送门

球啊球 @xzz_233 qaq

高斯消元模板题,关键在于将已知条件转化为方程组。

可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机。

由高中数学知识可以知道,三点定圆(二维),四点定球(三维)······以此类推,应该是\(n+1\)个点才能确定一个\(n\)维空间下的球。

那么隐藏的另一个关键未知量在哪里呢?

想想圆的标准方程\((x-x_0)^2+(y-y_0)^2=r^2\),除了圆心坐标,半径不也对这个圆起到决定性作用么?

接下来,额外设一个未知量——球的半径\(r\),开始试着对条件式进行变换。

对于\(n+1\)个点,它们与球心的距离是定值\(r\),那么我们可以得到形式如下的\(n+1\)个方程(a为球面点坐标,x为球心坐标)

\[(a_1-x_1)^2+(a_2-x_2)^2+···+(a_n-x_n)^2=r^2
\]

显然我们要把已知量和未知量分开,于是展开,移项

\[a_1^2-2a_1x_1+x_1^2+a_2^2-2a_2x_2+x_2^2+···+a_n^2-2a_nx_n+x_n^2=r^2
\]

\[2a_1x_1+2a_2x_2+···+2a_nx_n+r^2-x_1^2-x_2^2-···-x_n^2=a_1^2+a_2^2+···+a_n^2
\]

发现\(r^2-x_1^2-x_2^2-···-x_n^2\)与\(a\)无关,所以考虑换元,设\(t=r^2-x_1^2-x_2^2-···-x_n^2\)(实际上我们并不用求\(r\))

终于,我们可以看到一个关于\(x_1,x_2,···,x_n,t\)的\((n+1)\)元方程组了,上高斯消元

具体实现看代码

#include<cmath>
#include<cstdio>
#define R register
#define init for(i=1;i<=n;++i)ne[i-1]=pr[i+1]=i
const int N=19;
int p[N],pr[N],ne[N];
double a[N][N];
int main(){
R int n,i,j,k,x;
R double mx,d;
scanf("%d",&n);++n;
init;//链表初始化,为了实现交换行
for(i=1;i<=n;++i){
for(j=1;j<n;++j){
scanf("%lf",&d);//处理系数
a[i][j]=d*2;a[i][n+1]+=d*d;
}
a[i][n]=1;//t的系数为1
}
for(k=1;k<=n;++k){
mx=0;//蒟蒻没有交换主元,而是交换行
//这样做防掉精度的效果可能不如交换主元
for(i=ne[0];i;i=ne[i])
if(mx<fabs(a[i][k]))
mx=fabs(a[i][k]),x=i;
d=a[p[k]=x][k];//选择当前a最大的一行
pr[ne[pr[x]]=ne[x]]=pr[x];
for(j=1;j<=n+1;++j)
a[x][j]/=d;
for(i=ne[0];i;i=ne[i])
for(d=a[i][j=k];j<=n+1;++j)
a[i][j]-=d*a[x][j];
}//高斯消元
init;
for(k=n;k;--k){
d=a[x=p[k]][n+1];
pr[ne[pr[x]]=ne[x]]=pr[x];
for(i=ne[0];i;i=ne[i])
a[i][n+1]-=d*a[i][k];
}//回代
for(k=1;k<n;++k)
printf("%.3f ",a[p[k]][n+1]);
puts("");
return 0;
}

洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)的更多相关文章

  1. [洛谷P4035][JSOI2008]球形空间产生器

    题目大意:给你$n$个点坐标,要你求出圆心 题解:随机化,可以随机一个点当圆心,然后和每个点比较,求出平均距离$r$,如果到这个点的距离大于$r$,说明离这个点远了,就给圆心施加一个向这个点的力:若小 ...

  2. BZOJ.1013.[JSOI2008]球形空间产生器(高斯消元)

    题目链接 HDU3571 //824kb 40ms //HDU3571弱化版 跟那个一比这个太水了,练模板吧. //列出$n+1$个二次方程后两两相减,就都是一次方程了. #include <c ...

  3. 洛谷4035 JSOI2008球形空间产生器 (列柿子+高斯消元)

    题目链接 qwq 首先看到这个题,感觉就应该从列方程入手. 我们设给定的点的坐标矩阵是\(x\),然后球心坐标\(a_1,a_2....a_n\) 根据欧几里得距离公式,对于一个\(n维空间\)的第\ ...

  4. 洛谷 4035 [JSOI2008]球形空间产生器

    题目戳这里 一句话题意 给你 n+1 个 n 维点,需要你求出这个n维球的球心.(n<=10) Solution 这个题目N维的话确实不好想,反正三维就已经把我搞懵了,所以只好拿二维类比. 首先 ...

  5. 【BZOJ1013】【JSOI2008】球形空间产生器 高斯消元

    题目描述 有一个\(n\)维空间中的球,告诉你球面上\(n+1\)个点的坐标,求球心的坐标. \(n\leq 10\) 题解 设\(a_{i,j}\)为第\(i\)个点的第\(j\)维坐标,\(i=0 ...

  6. 洛谷P4783 【模板】矩阵求逆(高斯消元)

    题意 题目链接 Sol 首先在原矩阵的右侧放一个单位矩阵 对左侧的矩阵高斯消元 右侧的矩阵即为逆矩阵 // luogu-judger-enable-o2 #include<bits/stdc++ ...

  7. 洛谷P3232 [HNOI2013]游走(高斯消元+期望)

    传送门 所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了…… 首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号 边的期望次 ...

  8. 洛谷 P6030 - [SDOI2012]走迷宫(高斯消元+SCC 缩点)

    题面传送门 之所以写个题解是因为题解区大部分题解的做法都有 bug(u1s1 周六上午在讨论区里连发两个 hack 的是我,由于我被禁言才让 ycx 代发的) 首先碰到这种期望题,我们套路地设 \(d ...

  9. LG4035/BZOJ1013 「JSOI2008」球形空间产生器 高斯消元

    问题描述 LG4035 BZOJ1013 题解 设答案为\((p_1,p_2,p_3,...,p_n)\) 因为是一个球体,令其半径为\(r\),则有 \[\sum_{i=1}^{n}{(a_i-p_ ...

随机推荐

  1. Luogu4622 COCI2012-2013#6 JEDAN 组合、DP

    传送门 题意:给出一个$N$个数的序列$a_i$,其中$a_i=-1$表示第$i$个位置数字未知,问有多少种用非负整数代替$a_i$中$-1$的方法使得从全$0$序列经过以下操作若干次得到序列$a_i ...

  2. 【SQL】MaxComputer中调试与问题排查技巧小结

    1.分段调试 面对长的SQL,出错时一般直接看定位的行号,有时候不出错但是没数据时,应该尝试分段调试,很长的SQL嵌套很多的子查询时,一个一个子查询进行分别调试,看哪一步子查询出了问题,层层推进 2. ...

  3. python3 编程使用技巧

    from random import randint data = {"Student{}".format(i):randint(60,100) for i in range(1, ...

  4. Spring AOP不起作用原因

    一.直接在切面类定义切点: AOP切面类里面的方法全部不支持触发切面,否则一个切面函数把自己当做切点就会导致递归层层调用. AOP切面类发出函数调用一律不触发切面,避免两个切面类相互调用迭代请求的情况 ...

  5. Mongodb主从复制/ 副本集/分片集群介绍

    前面的文章介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 Master-Slave 模式(主从复制),一种是 Replica Sets 模式(副本集). Mong ...

  6. Jmeter-使用Ultimate Thread Group插件来设置负载场景

    前言: Jmeter插件相关请移步:https://www.jianshu.com/p/130c7fddeddf 自定义线程组:jp@gc - Ultimate Thread Group,功能强大,可 ...

  7. JS 实现计算一段文字中的字节数,字母数,数字数,行数,汉字数。

    看到了匹配,第一个想到了用正则表达式,哈哈,果然很方便.不过正则表达式高深莫测!我还没有研究明白啊..目前学了点皮毛.代码如下: <!DOCTYPE html PUBLIC "-//W ...

  8. oracle数据库添加新用户

    /*分为四步 */ /*第1步:创建临时表空间 */ create temporary tablespace kmyf_temp tempfile 'E:\app\pangxy\product\11. ...

  9. 【个人阅读】软件工程M1/M2阶段总结

    这次作业是好久以前布置的,由于学期末课程设计任务比较重,我在完善M2阶段的代码的同时又忙于数据库的实现和编译器的实现,一度感觉忙得透不过气来....到这些都基本完成的时候,会看自己以前的阅读心得,觉得 ...

  10. Android之JSON格式数据解析

    查看原文:http://blog.csdn.net/hantangsongming/article/details/42234293 JSON:JavaScript 对象表示法(JavaScript ...