BZOJ 球形空間產生器 解題報告 高斯消元

2022-04-30 01:54:07 字數 1597 閱讀 5827

有乙個球形空間產生器能夠在n維空間中產生乙個堅硬的球體。現在,你被困在了這個n維球體中,你只知道球

面上n+1個點的座標,你需要以最快的速度確定這個n維球體的球心座標,以便於摧毀這個球形空間產生器。

第一行是乙個整數n(1<=n=10)。接下來的n+1行,每行有n個實數,表示球面上一點的n維座標。每乙個實數精確到小數點

後6位,且其絕對值都不超過20000。

有且只有一行,依次給出球心的n維座標(n個實數),兩個實數之間用乙個空格隔開。每個實數精確到小數點

後3位。資料保證有解。你的答案必須和標準輸出一模一樣才能夠得分。

20.0 0.0

-1.0 1.0

1.0 0.0

0.500 1.500

我們可以知道,乙個球體上所有點到球心的距離相等,因此只需要求出乙個點(x1,x2,x3,...,xn),使得:

σn

j=0(ai,j-xj)2=c

其中c是常數,該方程由n+1個n元二次方程構成,不是線性方程組。但我們可以通過相鄰的兩個方程作差,把它變成n個n元方程,同時消去常數c

於是我們可以得到下面這個階梯矩陣

2(a1.1-a2.1)    2(a1,2-a2,2)    ...    2(a1,n-a2,n)σn

j=1(a2

1,j-a22,j

)

2(a2

.1-a3

.1)    2(a2

,2-a3

,2)    ...    2(a2

,n-a3

,n)σn

j=1(a2

2,j-a2

3,j)

.

.

.

2(an

.1-an+1,

1) 2(an

,2-an+1

,2) ... 2(an

,n-an+1

,n)σn

j=1(a2

n,j-a2

n+1,j)

高斯消元即可

#includeusing

namespace

std;

const

int maxn=10+15

;int

n;double

a[maxn][maxn],c[maxn][maxn],b[maxn];

intmain()

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

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

}for (int i=1;i<=n;i++) printf("

%.3f

",b[i]/c[i][i]);

return0;

}

(BZOJ1013)207 球形空間產生器

本作品採用知識共享署名 相同方式共享 4.0 國際許可協議進行許可。有乙個球形空間產生器能夠在n維空間中產生乙個堅硬的球體。現在,你被困在了這個n維球體中,你只知道球面上n 1個點的座標,你需要以最快的速度確定這個n維球體的球心座標,以便於摧毀這個球形空間產生器。輸入格式 第一行是乙個整數n。接下來...

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項的線性方程組。為了方便,就拿第...