记录编号 167394 评测结果 AAAAAAAAAA
题目名称 [JSOI 2008]球形空间产生器sphere 最终得分 100
用户昵称 Gravatar天一阁 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2015-06-24 11:28:21 内存使用 0.29 MiB
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

#define N 20
#define sqr(x) ((x)*(x))

using namespace std;

int n;
double X[N][N],Y[N];

struct node{
	double x[N];
	
	void scan(){
		for(int i=1;i<=n;i++)
			scanf("%lf",&x[i]);
	}
}a[N];

void print(){
	puts("equation : ");
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n+1;j++) printf("%.3lf ",X[i][j]);
		printf("\n");
	}
}

int main(){
	freopen("bzoj_1013.in","r",stdin);
	freopen("bzoj_1013.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n+1;i++) a[i].scan();
	for(int i=1;i<=n;i++){
		X[i][n+1]=0;
		for(int j=1;j<=n;j++){
			X[i][n+1]+=sqr(a[n+1].x[j])-sqr(a[i].x[j]);
			X[i][j]=2*(a[n+1].x[j]-a[i].x[j]);
		}
	}
//	print();
	for(int i=1;i<=n;i++){
		int t=i;
		for(int j=i;j<=n;j++){
			if(fabs(X[j][i])>fabs(X[t][i])) t=j;
		}
		for(int j=1;j<=n+1;j++){
			swap(X[t][j],X[i][j]);
		}
		for(int j=i+1;j<=n;j++){
			double tmp=X[j][i]/X[i][i];
			for(int k=i;k<=n+1;k++){
				X[j][k]-=X[i][k]*tmp;
			}
		}
	}
	Y[n]=X[n][n+1]/X[n][n];
	for(int i=n-1;i>=1;i--){
		double tmp=X[i][n+1];
		for(int j=i+1;j<=n;j++) tmp-=X[i][j]*Y[j];
		Y[i]=tmp/X[i][i];
	}
	for(int i=1;i<=n;i++) printf("%.3lf ",Y[i]);
	printf("\n");
	return 0;
}