[jsoi2008]球形空間產生器sphere
以二維的時候為例
球面上三個點分別為\((a_1,a_2)\),\((b_1,b_2)\),\((c_1,c_2)\)
設球心的點為\((x_1,x_2)\),球的半徑為\(t\)
列式得\(\left\
(a_1-x_1)^2+(a_2-x_2)^2&=(a_1)^2-2a_1x_1+(x_1)^2+(a_2)^2-2a_2x_2+(x_2)^2&=t\\
(b_1-x_1)^2+(b_2-x_2)^2&=(b_1)^2-2b_1x_1+(x_1)^2+(b_2)^2-2b_2x_2+(x_2)^2&=t\\
(c_1-x_1)^2+(c_2-x_2)^2&=(c_1)^2-2c_1x_1+(x_1)^2+(c_2)^2-2c_2x_2+(x_2)^2&=t
\end
\right.\)
聯立方程
\((a_1-x_1)^2+(a_2-x_2)^2=(b_1-x_1)^2+(b_2-x_2)^2=(c_1-x_1)^2+(c_2-x_2)^2\)
暴力展開
\((a_1)^2-2a_1x_1+(x_1)^2+(a_2)^2-2a_2x_2+(x_2)^2=(b_1)^2-2b_1x_1+(x_1)^2+(b_2)^2-2b_2x_2+(x_2)^2=(c_1)^2-2c_1x_1+(x_1)^2+(c_2)^2-2c_2x_2+(x_2)^2\)
整理得\((a_1)^2-2a_1x_1+(a_2)^2-2a_2x_2=(b_1)^2-2b_1x_1+(b_2)^2-2b_2x_2=(c_1)^2-2c_1x_1+(c_2)^2-2c_2x_2\)
也可以寫成這個樣子
\(\left\
(a_1)^2-2a_1x_1+(a_2)^2-2a_2x_2&=(b_1)^2-2b_1x_1+(b_2)^2-2b_2x_2\\
(b_1)^2-2b_1x_1+(b_2)^2-2b_2x_2&=(c_1)^2-2c_1x_1+(c_2)^2-2c_2x_2
\end
\right.\)
移來移去
\(\left\
-2a_1x_1-2a_2x_2+2b_1x_1+2b_2x_2&=-(a_1)^2-(a_2)^2+(b_1)^2+(b_2)^2\\
-2b_1x_1-2b_2x_2+2c_1x_1+2c_2x_2&=-(b_1)^2-(b_2)^2+(c_1)^2+(c_2)^2
\end
\right.\)
移來移去
\(\left\
(2b_1-2a_1)x_1+(2b_2-2a_2)x_2&=-(a_1)^2-(a_2)^2+(b_1)^2+(b_2)^2\\
(2c_1-2b_1)x_1+(2c_2-2b_2)x_2&=-(b_1)^2-(b_2)^2+(c_1)^2+(c_2)^2
\end
\right.\)
然後我們發現它成了乙個\(n\)元一次方程組,於是我們來高斯消元就行了
#include#include#include#includeusing namespace std;
#define eps 1e-7
#define n 20
int n;
double c[n][n], a[n][n], ans[n];
inline int read()
int main()
} ans[n] = a[n][n + 1];
for (register int i = n - 1; i; i--)
for (register int i = 1; i <= n; i++)
printf("%.3lf ", ans[i]);
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維座標。每乙個實...