JSOI2008球形空间产生器

P2182 - 【JSOI2008】球形空间产生器

Description

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

Input

第一行是一个整数,n。

接下来的n+1行,每行有n个实数,表示球面上一点的n维坐标。每一个实数精确到小数点后6位,且其绝对值都不超过20000。

Output

有且只有一行,依次给出球心的n维坐标(n个实数),两个实数之间用一个空格隔开。

每个实数精确到小数点后3位。数据保证有解。你的答案必须和标准输出一模一样才能够得分。

Sample Input

2

0.0 0.0

-1.0 1.0

1.0 0.0

Sample Output

0.500 1.500

Hint

数据规模:

对于40%的数据,1<=n<=3

对于100%的数据,1<=n<=10

提示:给出两个定义:

1、 球心:到球面上任意一点距离都相等的点。

2、 距离:设两个n为空间上的点A, B的坐标为(a1, a2, …, an), (b1, b2, …, bn),则AB的距离定义为:

dist = sqrt( (a1-b1)^2 + (a2-b2)^2 + … + (an-bn)^2 )

Source

耒阳大世界(衡阳八中) OJ 1013

解方程组

高斯消元裸体,通过一个坐标,可以和其他n个坐标建立起一个n个方程关系,在运用高斯约旦消元法即可;

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<iomanip>
 4 #include<cstring>
 5 #include<cstdlib>
 6 #include<cstdio>
 7 #include<queue>
 8 #include<ctime>
 9 #include<cmath>
10 #include<stack>
11 #include<map>
12 #include<set>
13 #define rep(i,a,b) for(register int i=a;i<=b;i++)
14 #define il inline
15 #define ll long long
16 #define db double
17 using namespace std;
18 #define eps 0.0000001
19 const int N=20;
20 db a[N][N],f[N];
21 int n;
22 il int gi();
23 void Input() {
24   n=gi();
25   rep(i,1,n) scanf("%lf",&f[i]);
26   db t;
27   rep(i,1,n)
28     rep(j,1,n) {
29     scanf("%lf",&t);
30     a[i][j]=2*(t-f[j]);
31     a[i][n+1]+=t*t-f[j]*f[j];
32   }
33 }
34 void Gauss() {
35   rep(i,1,n) {
36     int line=i;
37     while(line<=n&&fabs(a[line][i])<=eps) line++;// find 主元
38     if(line>n) continue;
39     if(line!=i)  rep(j,1,n+1) swap(a[line][j],a[i][j]) ;
40     db k=a[i][i];
41     rep(j,1,n+1)
42       a[i][j]/=k;// 系数化为1
43     rep(j,1,n)//bug 1 : j hangshu  X <=n+1 X
44       if(j!=i) {// bug 2:  a[j][i]<eps ? gun!
45     k=a[j][i];
46     rep(o,1,n+1) a[j][o]-=k*a[i][o];// Change 0
47       }
48    }
49 }
50 int main() {
51     freopen("HNOI.in","r",stdin);
52     freopen("HNOI.out","w",stdout);
53     Input();
54     Gauss();
55     rep(i,1,n-1) printf("%.3lf ",a[i][n+1]);
56     printf("%.3lf",a[n][n+1]);
57     return 0;
58 }
59
60 il int gi() {
61     int res=0,f=1;
62     char ch=getchar();
63     while((ch<‘0‘||ch>‘9‘)&&ch!=‘-‘) ch=getchar();
64     if(ch==‘-‘) ch=getchar(),f=-1;
65     while(ch>=‘0‘&&ch<=‘9‘) res=res*10+ch-‘0‘,ch=getchar();
66     return res*f;
67 }
时间: 2024-10-15 09:01:29

JSOI2008球形空间产生器的相关文章

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

二次联通门 : BZOJ 1013: [JSOI2008]球形空间产生器sphere /* BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元 QAQ SB的我也能终于能秒题了啊 设球心的坐标为(x,y,z...) 那么就可以列n+1个方程,化化式子高斯消元即可 */ #include <cstdio> #include <iostream> #include <cstring> #define rg register #define Max

BZOJ1013: [JSOI2008]球形空间产生器sphere

1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4485  Solved: 2341[Submit][Status][Discuss] Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. Input 第一行是一个整数n(1

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

1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3584  Solved: 1863[Submit][Status][Discuss] Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. Input 第一行是一个整数,n.接

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

JSOI2008 球形空间产生器sphere [题目描述] 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. [输入格式] 第一行是一个整数,n.接下来的n+1行,每行有n个实数,表示球面上一点的n维坐标.每一个实数精确到小数点后6位,且其绝对值都不超过20000. [输出格式] 有且只有一行,依次给出球心的n维坐标(n个实数),两个实数之间用一个空

[JSOI2008]球形空间产生器sphere

1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3131  Solved: 1644[Submit][Status][Discuss] Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. Input 第一行是一个整数,n.接

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

题链:http://www.lydsy.com/JudgeOnline/problem.php?id=1013 1013: [JSOI2008]球形空间产生器sphere 时间限制: 1 Sec  内存限制: 162 MB 提交: 3063  解决: 1607 [提交][][] 题目描述 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. 输入 第一行

bzoj千题计划104:bzoj1013: [JSOI2008]球形空间产生器sphere

http://www.lydsy.com/JudgeOnline/problem.php?id=1013 设球心(x1,x2,x3……) 已知点的坐标为t[i][j] 那么 对于每个i满足 Σ (t[i][j]-x[j])^2 = Σ (t[0][j]-x[j])^2 化简开就是 2*(t[0][j]-t[i][j])*x[j] = t[0][j]^2-t[i][j]^2 n个方程n个未知数 高斯消元 #include<cmath> #include<cstdio> #includ

1013: [JSOI2008]球形空间产生器sphere

1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 6517  Solved: 3381[Submit][Status][Discuss] Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. Input 第一行是一个整数n(1<

P4035 [JSOI2008]球形空间产生器

P4035 [JSOI2008]球形空间产生器 题目 题目大意 给出n维空间上的n+1个点,且这些店都在一个圆的表面,求圈心坐标. 定义: 球心:到球面上任意一点距离都相等的点. 两点间距离公式 \[ A(x_1,x_2,x_3,x_4,\cdots x_n) \] \[ B(y_1,y_2,y_3,y_4,\cdots y_n) \] \[ distance:\sqrt[2]{\sum_{i=1}^{n}(x_i-y_i)^2} \] 题目看上去应该就是解方程了. 我们可以使用gauss消元法

题解 P4035 【[JSOI2008]球形空间产生器】

Solution [JSOI2008]球形空间产生器 题目大意:在\(n\)维空间中给定\(n + 1\)个点,求到\(n + 1\)个点的欧几里得距离相等的点 高斯消元 分析: 假设我们有点\((x_1,x_2,x_3, \dots,x_n)\),到点\((a_1,a_2,a_3, \dots,a_n)\),\((b_1,b_2,b_3, \dots,b_n)\)相等 有\(\sqrt{\sum(x_i-a_i)^2}=\sqrt{\sum(x_i-b_i)^2}\) 显然根号下都是非负数 \