传送门

题目描述

有一个球形空间产生器能够在 nnn 维空间中产生一个坚硬的球体。现在,你被困在了这个 nnn 维球体中,你只知道球面上 n+1n+1n+1 个点的坐标,你需要以最快的速度确定这个 nnn 维球体的球心坐标,以便于摧毁这个球形空间产生器。

输入输出格式

输入格式:

第一行是一个整数 nnn (1<=N=10)(1<=N=10)(1<=N=10) 。接下来的 n+1n+1n+1 行,每行有 nnn 个实数,表示球面上一点的 nnn 维坐标。每一个实数精确到小数点后 666 位,且其绝对值都不超过 200002000020000 。

输出格式:

有且只有一行,依次给出球心的 nnn 维坐标( nnn 个实数),两个实数之间用一个空格隔开。每个实数精确到小数点后 333 位。数据保证有解。你的答案必须和标准输出一模一样才能够得分。

输入输出样例

输入样例#1:

2

0.0 0.0

-1.0 1.0

1.0 0.0

输出样例#1:

0.500 1.500

说明

提示:给出两个定义:

题解

利用所有点到球心的距离相等 用两个点构造出来方程

例如:若现在是二维

设球心为$(x,y) \(有两个点\)(a,b)$ \((a',b')\)

点与球心的距离的平方为

\((a-x)^2+(b-y)^2 = a^2-2ax+x^2+b^2-2by+y^2\)

减去另一个点得:

\(2(a-a')x+2(b-b')y=a^2-a'^2+b^2-b'^2\)

列出来高斯消元完事

PS:

1.用一个点与其他所有点进行联系列出方程即可

2.写高斯消元时注意边界

code:

//By Menteur_Hxy
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#define LL long long
#define M(a,b) memset(a,(b),sizeof(a))
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define C(i,a,b) for(register int i=(b);i>=(a);i--)
using namespace std; LL rd() {
LL x=0,fla=1; char c=getchar();
while(!isdigit(c)) {if(c=='-') fla=-fla;c=getchar();}
while(isdigit(c)) x=(x<<3)+(x<<1)+c-48,c=getchar();
return x*fla;
} const double eps=1e-6;
const int N=11;
int n;
double da[N][N],a[N],ans[N]; int gauss() {
int h=1,l=1;
for(;h<=n&&l<=n+1;h++,l++) {
int r=h;
F(i,h+1,n) if(fabs(da[r][l])>fabs(da[i][l])) r=i;
if(fabs(da[r][l])<eps) {h--;continue;}
if(r!=h) F(i,l,n+1) swap(da[r][i],da[h][i]);
F(i,h+1,n) if(fabs(da[i][l])>eps) {
double t=da[i][l]/da[h][l];
F(j,l,n+1) da[i][j]-=da[h][j]*t;
da[i][l]=0;
}
}
F(i,h,n) if(fabs(da[i][n+1])>eps) return -1;//无解
if(h<n+1) return n+1-h;//自由元个数
C(i,1,n) {
double tmp=da[i][n+1];
F(j,i+1,n) tmp-=ans[j]*da[i][j];
ans[i]=(tmp/da[i][i]);
}
return 0;
} int main() {
n=rd();
F(i,1,n) scanf("%lf",&a[i]);
F(i,1,n) F(j,1,n) {
double t; scanf("%lf",&t);
da[i][j]=2*(t-a[j]);
da[i][n+1]+=t*t-a[j]*a[j];
}
gauss();
F(i,1,n-1) printf("%.3lf ",ans[i]);
printf("%.3lf\n",ans[n]);
return 0;
}

[luogu4035 JSOI2008] 球形空间产生器 (矩阵 高斯消元)的更多相关文章

  1. lydsy1013: [JSOI2008]球形空间产生器sphere 高斯消元

    题链:http://www.lydsy.com/JudgeOnline/problem.php?id=1013 1013: [JSOI2008]球形空间产生器sphere 时间限制: 1 Sec  内 ...

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

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

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

    [JSOI2008]球形空间产生器 \(solution:\) 非常明显的一道高斯消元.给了你n+1个球上的位置,我们知道球上任何一点到球心的距离是相等,所以我们 可以利用这一个性质.我们用n+1个球 ...

  4. [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)

    Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...

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

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

  6. 【BZOJ1013】[JSOI2008] 球形空间产生器(高斯消元)

    点此看题面 大致题意: 给定一个\(n\)维球体上的\(n+1\)个点,请你求出这个球体的圆心的位置. 列出方程 这一看就是一道解方程题. 我们可以设这个球体的圆心的位置为\((x_1,x_2,..x ...

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

    传送门 设球心的坐标为未知量 用最后一个点来表示球面到球心的距离,那么它和前n个式子相等 移项乱搞 最后高斯消元 #include <cmath> #include <cstdio& ...

  8. 【BZOJ1013】球形空间产生器(高斯消元)

    [BZOJ1013]球形空间产生器(高斯消元) 题面 Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标, ...

  9. BZOJ_1013_[JSOI2008]_球形空间产生器_(高斯消元)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1013 n维空间,给出球上n+1个点的n维坐标,求球心坐标. 提示:给出两个定义:1. 球心:到 ...

  10. 【BZOJ 1013】【JSOI2008】球形空间产生器sphere 高斯消元基础题

    最基础的高斯消元了,然而我把j打成i连WA连跪,考场上再犯这种错误就真的得滚粗了. #include<cmath> #include<cstdio> #include<c ...

随机推荐

  1. 原生node写一个静态资源服务器

    myanywhere 用原生node做一个简易阉割版的anywhere静态资源服务器,以提升对node与http的理解. 相关知识 es6及es7语法 http的相关网络知识 响应头 缓存相关 压缩相 ...

  2. 搞定PHP面试 - 函数知识点整理

    一.函数的定义 1. 函数的命名规则 函数名可以包含字母.数字.下划线,不能以数字开头. function Func_1(){ } //合法 function func1(){ } //合法 func ...

  3. 【AIM Tech Round 5 (rated, Div. 1 + Div. 2) 总结】【题解往前或往后翻,不在这】

    又是爆炸的一场 心态有点小崩.但问题不大.. 看A题,一直担心有多个正方形..小心翼翼地看完之后,毅然地交上去了. [00:08] A[Accpted] 然后开始看B题. 觉得和之前做的某题很像,但翻 ...

  4. xml00

    <?xml verson="1.0" encoding="ISO-8859-1"?> xml声明<note> <to>jon ...

  5. [SQL]选取随机行

    在sql server中语句如下: select     top 10     * from recordTable order by NEWID();

  6. shell文本过滤编程(十一):paste命令

    [版权声明:转载请保留出处:blog.csdn.net/gentleliu. Mail:shallnew at 163 dot com] 从字面上能够看出.paste命令和cut命令功能相反,cut命 ...

  7. 调用imagemagick做响应图片

    设计出图后经常需要改下尺寸放在别的项目上使用,每次都是设计手工处理,其实图片服务可以做更多事情,比如借助强大的im,可以通过url控制图片尺寸 var childProcess = require(' ...

  8. Hbase集群扩展

    当hbase集群节点不够用时,我们须要新增节点来对集群进行扩展.hbase集群的扩展是非常easy的,过程例如以下: 一.准备一台新机器作为扩展节点,这里是作为slaves15,该机子要先与maste ...

  9. Java学习之道:Java 导出EXCEL

    1.Apache POI简单介绍  Apache POI是Apache软件基金会的开放源代码函式库.POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开 ...

  10. hadoop 计数器

    一.hadoop有非常多自带的计数器,相信看过执行log的都会看到各种数据 二.用户自己定义计数器 在开发中常常须要记录错误的数据条数,就能够用计数器来解决. 1.定义:用一个枚举来定义一组计数器,枚 ...