AcWing 207. 球形空间产生器
原题链接
中等
作者:
ZTEG
,
2020-09-01 17:01:37
,
所有人可见
,
阅读 1181
#include<bits/stdc++.h>
using namespace std;
int n;
double a[20];
double b[20][20];
double c[20][20];
void dfs(int x) {
if(x==n+1) return;
for(int i=x+1; i<=n; i++) {
double k=c[x][x]/c[i][x];
for(int j=0; j<=n; j++)
c[i][j]=c[i][j]*k-c[x][j];
}
dfs(x+1);
for(int i=n; i>x; i--)
c[x][0]-=a[i]*c[x][i];
a[x]=c[x][0]/c[x][x];
}
int main() {
cin>>n;
for(int i=0; i<=n; i++)
for(int j=1; j<=n; j++)
cin>>b[i][j];
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++) {
c[i][0]-=(-b[i-1][j]-b[i][j])*(b[i][j]-b[i-1][j]);
c[i][j]=2*(b[i][j]-b[i-1][j]);
}
dfs(1);
for(int i=1; i<=n; i++)
printf("%.3lf ",a[i]);
return 0;
}