有乙個球形空間產生器能夠在 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維座標。每乙個實...