题目戳这里

一句话题意

给你 n+1 个 n 维点,需要你求出这个n维球的球心。(n<=10)

Solution

这个题目N维的话确实不好想,反正三维就已经把我搞懵了,所以只好拿二维类比。

首先因为球心到边上的点距离相等,所以我们可以列出三个式子:

设 球心坐标为(\(x_0\),\(y_0\))

\((x_1-x_0)^2+(y_1-y_0)^2=r^2\)

\((x_2-x_0)^2+(y_2-y_0)^2=r^2\)

\((x_3-x_0)^2+(y_3-y_0)^2=r^2\)

三个式子中都有r和平方项不好计算,所以我们用1式减2式,2式减3式,就得到两个式子:

\(x_1^2-x_2^2-2x_1x_0+2x_2x_0+y_1^2-y_2^2-2y_1y_0+2y_2y_0=0\)

\(x_2^2-x_3^2-2x_2x_0+2x_3x_0+y_2^2-y_3^2-2y_2y_0+2y_3y_0=0\)

而\(x_1,y_1,x_2,y_2,x_3,y_3\)都是已知的,可以看成常数项和系数。

再整理一下:

\(2(x_2-x_1)x_0+2(y_2-y_1)y_0=x_2^2-x1^2+y_2^2-y_1^2\)

\(2(x_3-x_2)x_0+2(y_3-y_2)y_0=x_3^2-x2^2+y_3^2-y_2^2\)

很明显一个二元一次方程组,然后使用高斯消元就可以求出球心。

这样就很容易推到N维了,这里就不一一写出,大家自己手推一下吧。主要是太麻烦了

Coding

#include<bits/stdc++.h>
using namespace std;
const int N = 105;
double s[N][N],ans[N],A[N][N];
int n,flag=1;
void Solve(int x)
{
if(x==n){ ans[x]=s[x][n+1]/s[x][x]; return; }
for(int i=x+1;i<=n;i++)
{
double box=abs(s[x][x])/abs(s[i][x]);
if(s[x][x]*s[i][x]>0)
for(int j=x;j<=n+1;j++)
s[i][j]*=box,s[i][j]=s[i][j]-s[x][j];
else
for(int j=x;j<=n+1;j++)
s[i][j]*=box,s[i][j]=s[i][j]+s[x][j];
}
Solve(x+1);
for(int i=n;i>=x+1;i--)
s[x][n+1]-=(ans[i]*s[x][i]);
ans[x]=s[x][n+1]/s[x][x];
return ;
}
int main()
{
cin>>n;
for(int i=1;i<=n+1;i++)
for(int j=1;j<=n;j++)
scanf("%lf",&A[i][j]);
for(int i=2;i<=n+1;i++)
for(int j=1;j<=n;j++)
{
s[i-1][j]=2*(A[i][j]-A[i-1][j]);
s[i-1][n+1]+=(A[i][j]*A[i][j]-A[i-1][j]*A[i-1][j]);
}
Solve(1);
for(int i=1;i<=n;i++)
printf("%.3lf ",ans[i]);
return 0;
}

洛谷 4035 [JSOI2008]球形空间产生器的更多相关文章

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

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

  2. 洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)

    洛谷题目传送门 球啊球 @xzz_233 qaq 高斯消元模板题,关键在于将已知条件转化为方程组. 可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机. 由 ...

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

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

  4. 【bzoj1013】[JSOI2008]球形空间产生器sphere

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4530  Solved: 2364[Subm ...

  5. BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/Judg ...

  6. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

  7. bzoj 1013 [JSOI2008]球形空间产生器sphere(高斯消元)

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3584  Solved: 1863[Subm ...

  8. 线性代数(高斯消元):JSOI2008 球形空间产生器sphere

    JSOI2008 球形空间产生器sphere [题目描述] 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确 ...

  9. BZOJ 1013 [JSOI2008]球形空间产生器sphere

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3074  Solved: 1614[Subm ...

随机推荐

  1. smarty在循环的时候计数来显示这是第几次循环的功能

    想必有很多人比较喜欢这个smarty循环的时候有个变量增加的功能或比较需要这个功能吧?其实不需要额外的变量,当然你也许根本用不了.我们用smarty内置的就可以了.就是smarty有foreach和s ...

  2. JavaSE入门学习18:Java面向对象之多态

    一Java多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现.比方我们说"宠 物"这个对象.它就有非常多不同的表达或实现,比方有小猫.小狗.蜥 ...

  3. sql 查询重复的数据

    select * from yryz_role_partner where user_id in (select user_id from yryz_role_partner group by use ...

  4. Linux下实现文件双向同步

    修改的地方时:私钥和公约处. 其次 vi /root/.unison/default.prf 这个文件在这个位置 root = /tmp/test root = ssh://root@10.10.3. ...

  5. JavaScript创建块级作用域

    1.JavaScript创建块级作用域 (1)方法一:ES6 (2)方法二:闭包 2.示例 <!DOCTYPE html> <html lang="zh"> ...

  6. 嵌套矩形——DAG上的动态规划

    有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.非常多问题都能够转化为DAG上的最长路.最短路或路径计数问题. 题目描写叙述: 有n个矩形,每一个矩 ...

  7. Nginx:HTTP过滤模块

    参考资料<深入理解Nginx> HTTP过滤模块也是一种HTTP模块,与普通HTTP处理模块不同在于: 1.一个请求仅由一个HTTP处理模块处理,而可以被任意个HTTP过滤模块处理 2.普 ...

  8. Nigix加入Hello World模块

    详细资料:<深入理解Nginx> 1.编写第三方模块 建立文件夹hello,里面有两个文件: ngx_http_mytest_module.c #include <ngx_confi ...

  9. JavaScript Array pop(),shift()函数

    pop() 删除数组的最后一个元素并返回删除的元素 shift() 删除并返回数组的第一个元素

  10. OpenLayers 3 之 加入地图鼠标右键菜单

    加入右键菜单,首先我们要监听鼠标右键点击的操作,我们知道鼠标右键事件名是 contextmenu.当鼠标在 html 元素之上,点击鼠标右键,便会触发 contextmenu 事件,在 context ...