洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)
球啊球 @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为球心坐标)
\]
显然我们要把已知量和未知量分开,于是展开,移项
\]
\]
发现\(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]球形空间产生器(高斯消元)的更多相关文章
- [洛谷P4035][JSOI2008]球形空间产生器
题目大意:给你$n$个点坐标,要你求出圆心 题解:随机化,可以随机一个点当圆心,然后和每个点比较,求出平均距离$r$,如果到这个点的距离大于$r$,说明离这个点远了,就给圆心施加一个向这个点的力:若小 ...
- BZOJ.1013.[JSOI2008]球形空间产生器(高斯消元)
题目链接 HDU3571 //824kb 40ms //HDU3571弱化版 跟那个一比这个太水了,练模板吧. //列出$n+1$个二次方程后两两相减,就都是一次方程了. #include <c ...
- 洛谷4035 JSOI2008球形空间产生器 (列柿子+高斯消元)
题目链接 qwq 首先看到这个题,感觉就应该从列方程入手. 我们设给定的点的坐标矩阵是\(x\),然后球心坐标\(a_1,a_2....a_n\) 根据欧几里得距离公式,对于一个\(n维空间\)的第\ ...
- 洛谷 4035 [JSOI2008]球形空间产生器
题目戳这里 一句话题意 给你 n+1 个 n 维点,需要你求出这个n维球的球心.(n<=10) Solution 这个题目N维的话确实不好想,反正三维就已经把我搞懵了,所以只好拿二维类比. 首先 ...
- 【BZOJ1013】【JSOI2008】球形空间产生器 高斯消元
题目描述 有一个\(n\)维空间中的球,告诉你球面上\(n+1\)个点的坐标,求球心的坐标. \(n\leq 10\) 题解 设\(a_{i,j}\)为第\(i\)个点的第\(j\)维坐标,\(i=0 ...
- 洛谷P4783 【模板】矩阵求逆(高斯消元)
题意 题目链接 Sol 首先在原矩阵的右侧放一个单位矩阵 对左侧的矩阵高斯消元 右侧的矩阵即为逆矩阵 // luogu-judger-enable-o2 #include<bits/stdc++ ...
- 洛谷P3232 [HNOI2013]游走(高斯消元+期望)
传送门 所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了…… 首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号 边的期望次 ...
- 洛谷 P6030 - [SDOI2012]走迷宫(高斯消元+SCC 缩点)
题面传送门 之所以写个题解是因为题解区大部分题解的做法都有 bug(u1s1 周六上午在讨论区里连发两个 hack 的是我,由于我被禁言才让 ycx 代发的) 首先碰到这种期望题,我们套路地设 \(d ...
- LG4035/BZOJ1013 「JSOI2008」球形空间产生器 高斯消元
问题描述 LG4035 BZOJ1013 题解 设答案为\((p_1,p_2,p_3,...,p_n)\) 因为是一个球体,令其半径为\(r\),则有 \[\sum_{i=1}^{n}{(a_i-p_ ...
随机推荐
- java中使用jxl读取excel中的数据
package bboss; import java.io.File; import java.io.FileInputStream; import java.io.IOException; impo ...
- sqlserver 发送http请求
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures' ...
- odoo 11导入外部数据过程记录
在开发过程中,遇见需要将SQL Server中的数据转移到Pg数据库的情况,那么如何做才能解决这一问题呢? 1.自己写代码,将数据从SQL Server到PG. 2.利用odoo自带的导入功能导入. ...
- EZ 2018 06 02 NOIP2018 模拟赛(十七)
这次的比赛是真心比较狗,我TM的写了30min的树剖ZZ地直接memset超时了 话说我既然想到差分就应该去写差分的啊! 好了不过这次Rank还挺高的,终于要打进前10了当然是假的了. 好了下面开始讲 ...
- iphone忘记锁屏密码却记得appleID密码的不保存数据的刷机办法
请注意看清题目再看本文,另外一切后果博主不负任何责任.操作实现环境:原装数据线,拔掉sim卡昨天,iPhone6sp忘记密码被锁定,尝试通过找回手机抹除手机功能后,提示需要手机接入互联网才能实现,而我 ...
- Linux下路由配置梳理
在日常运维作业中,经常会碰到路由表的操作.下面就linux运维中的路由操作做一梳理:---------------------------------------------------------- ...
- 如何用chrome查看post get及返回的数据
chrome浏览器按下F12打开开发者工具 点击Network,找到过滤器 筛选XHR,Method那一列会显示POST GET:
- 12.16 Daily Scrum
Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐厅列表. 实现和菜谱相关的餐厅列表. 邓亚梅 美化搜索框UI. 美 ...
- 访谈:BugPhobia’s Brief Communication
0x01 :采访的学长简介 If you weeped for the missing sunset, you would miss all the shining stars 梁野,北京航空航天大学 ...
- Linux内核分析 读书笔记 (第四章)
第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间.进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最大限 ...