JSOI2008 球形空間產生器

2022-08-20 02:12:08 字數 1411 閱讀 7513

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

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

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

高維球長啥樣啊 ==

只能拿三維的來想》<

我們知道球上的任意一點到球心的距離都等於半徑

然後我們又有給定提示的第二個公式

我們就可以列方程辣

我們設給的n+1個點為\(a,b,c\)

設球心為\(x\)

顯然我們可以列乙個方程(以第乙個點為例)

\(\sum_^=r^2\)

然後我們化簡一下

\(\sum_^ - 2*\sum_^+\sum_^=r^2\)

然後我們發現這是個二次的方程,而且還不知道r

那高斯消元個錘子

然後我們發現乙個問題

由n+1個點組成的方程組第1項是常數,每個方程的第3項都相同

所以我們可以作差

我們還是以第一項和第二項為例

這樣式子就成了\(\sum_^=\sum_^\)

然後就化成了n個方程,並且只有n個未知數,並且最高次項是1次

就可以高斯消元辣

#include#include#include#includeconst int m = 15 ;

const double eps = 1e-7 ;

using namespace std ;

int n ;

double b[m][m] , p[m][m] , sum[m] ;

inline void gauss()

for(int i = 1 ; i <= n ; i ++) printf("%.3lf ",b[i][n + 1]) ;

}int main()

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

gauss() ;

return 0 ;

}

JSOI2008 球形空間產生器

火星人不能忍受地球人對他們的歧視,終於發明了一種非常強大的 球 形空間產生器 球形空間產生器能產生乙個 n 維球體屏障,而且這個屏障是堅 不可摧的,被困在球體內的地球人就被切斷了與外界的聯絡。js08 現在就被困在 了屏障中,情況十分危急,必須盡快找出並摧毀球形空間產生器。js08 經過摸索 和碰壁...

JSOI2008 球形空間產生器

嘟嘟嘟 由題意可知,我們要求乙個 n 元組 x 1,x 2,x 3,dots,x n 滿足 sum a x j 2 r 2 對於 forall i in 1,n 都成立。這個式子說白了就是乙個 n 元二次方程組,很顯然我 們 不會。但是我們會 n 元線性方程組啊,能不能轉化一下?答案是能的。很簡單,...

JSOI2008 球形空間產生器

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