JSOI球形空间产生器 (高斯消元)

时间:2023-03-09 22:30:22
JSOI球形空间产生器 (高斯消元)

按照朴素的列方程,可以列出n+1个n元2次方程。

将相邻的两个方程相减就可以得到n个n元1次方程,进行高斯消元就可以了。

 var a,b:array[..,..] of extended;
temp,ans:array[..] of extended;
i,j,k,n:longint;
cnt:extended;
begin
readln(n);
for i:= to n+ do
for j:= to n do
read(b[i,j]);
for i:= to n do
for j:= to n do
begin
a[i,j]:=*(b[i+,j]-b[i,j]);
a[i,n+]:=a[i,n+]+b[i+,j]*b[i+,j]-b[i,j]*b[i,j];
end;
//--------------------------------rpCardinal Orz--------------------------------------
for i:= to n- do
begin
for j:=i+ to n do
if a[j,i]>a[i,i] then
begin
temp:=a[i];
a[i]:=a[j];
a[j]:=temp;
end;
for j:=i+ to n do
begin
cnt:=a[j,i]/a[i,i]; a[j,i]:=;
for k:=i+ to n+ do
a[j,k]:=a[i,k]*cnt-a[j,k];
end;
end;
ans[n]:=a[n,n+]/a[n,n];
for i:=n- downto do
begin
for j:=i+ to n do a[i,n+]:=a[i,n+]-ans[j]*a[i,j];
ans[i]:=a[i,n+]/a[i,i];
end;
for i:= to n do write(ans[i]::,' ');
end.