BZOJ 1013 球形空間產生器(高斯消元)

2022-05-21 14:57:07 字數 1339 閱讀 4641

時間限制: 1 sec  記憶體限制: 128 mb

提交: 11  解決: 7

[提交] [狀態] [命題人:admin]

題目描述

有乙個球形空間產生器能夠在n維空間中產生乙個堅硬的球體。現在,你被困在了這個n維球體中,你只知道球面上n+1個點的座標,你需要以最快的速度確定這個n維球體的球心座標,以便於摧毀這個球形空間產生器。

輸入第一行是乙個整數n(1<=n=10)。接下來的n+1行,每行有n個實數,表示球面上一點的n維座標。每乙個實數精確到小數點後6位,且其絕對值都不超過20000。

輸出有且只有一行,依次給出球心的n維座標(n個實數),兩個實數之間用乙個空格隔開。每個實數精確到小數點後3位。資料保證有解。你的答案必須和標準輸出一模一樣才能夠得分。

複製樣例資料

2

0.0 0.0

-1.0 1.0

1.0 0.0

樣例輸出
0.500 1.500

提示

給出兩個定義:1、 球心:到球面上任意一點距離都相等的點。2、 距離:設兩個n為空間上的點a, b的座標為(a1, a2, …, an), (b1, b2, …, bn),則ab的距離定義為:dist = sqrt( (a1-b1)^2 + (a2-b2)^2 + … + (an-bn)^2 )

根據圓上各點到圓心距離均為半徑,建立乙個n元方程組,兩兩相減消去r,用高斯消元求解方程

#include "

bits/stdc++.h

"using

namespace

std;

typedef

long

long

ll;const

int mod = 1e9 + 7

;const

int maxn = 1e5 + 100

;double a[30][30], b[30][30], c[30

];int

main()

}for (int i = 0; i < n; i++)

}double

rate;

for (int i = 0; i < n; i++)

swap(c[i], c[j]);

break

; }

}for (int j = 0; j < n; j++)

c[j] -= c[i] *rate;}}

int flag = 0

;

for (int i = 0; i < n; i++)

printf("\n

");return0;

}

bzoj1013 球形空間產生器

第一眼看到這題完全沒思路。搜了一下題解發現就是解乙個方程組。orz 然而我也不會啊233 所以說就學了一下高斯消元。據說高斯 約當消元法在oi中更常用 設球心為x x1,x2,x3,x4,xn 每乙個點的座標為ai ai1,ai2,ai3,ain 那麼根據空間距離公式可以得到 因為球心到球面上個點距...

BZOJ 1013 球形空間產生器sphere

1.題目鏈結。題目大意 給出乙個n維球面上的n 1個點的座標,求解這個球心的座標。2.首先,如果解存在,一定是唯一確定的。資料保證解存在,所以不用管無解的情況。設球心是 x1,x2,x3,x4.xn 根據球的性質我們可以得到n 1個方程,然後逐項相減,就可以得到乙個n項的線性方程組。為了方便,就拿第...

BZOJ1013 球形空間產生器(高斯消元)

有乙個球形空間產生器能夠在n維空間中產生乙個堅硬的球體。現在,你被困在了這個n維球體中,你只知道球 面上n 1個點的座標,你需要以最快的速度確定這個n維球體的球心座標,以便於摧毀這個球形空間產生器。第一行是乙個整數n 1 n 10 接下來的n 1行,每行有n個實數,表示球面上一點的n維座標。每乙個實...