bzoj1013 [JSOI2008]球形空间产生器sphere

来源:互联网 发布:nginx 绑定域名访问 编辑:程序博客网 时间:2024/06/08 08:43

题目

解一个多元二次方程组,不过方程组很有特点,前后一减就成多元一次的了,高斯消元上。

顺便贴个模板。

#include<bits/stdc++.h>#define N 50#define eps 1e-8using namespace std;int n;double A[N+1][N+1];double f[N+1][N+1];double x[N+1];void gauss(){    for(int i=1;i<=n;i++)    {        double mx=-1.0;int id;        for(int j=i;j<=n;j++)if(fabs(f[i][j])>mx)mx=fabs(f[i][j]),id=j;        if(id!=i)for(int j=1;j<=n+1;j++)swap(f[id][j],f[i][j]);        double tmp=f[i][i];        for(int j=i+1;j<=n+1;j++)f[i][j]/=tmp;        for(int j=1;j<=n;j++)        {            if(i==j)continue;            double tmp=f[j][i];            for(int k=1;k<=n+1;k++)f[j][k]-=tmp*f[i][k];        }    }    for(int i=1;i<=n;i++)x[i]=f[i][n+1];}int main(){    //freopen("in.txt","r",stdin);    scanf("%d",&n);    for(int i=1;i<=n+1;i++)        for(int j=1;j<=n;j++)            scanf("%lf",&A[i][j]);    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            f[i][j]=2*(A[i+1][j]-A[i][j]);            f[i][n+1]+=A[i+1][j]*A[i+1][j]-A[i][j]*A[i][j];        }    }    gauss();    for(int i=1;i<n;i++)printf("%.3f ",x[i]);    printf("%.3f",x[n]);    return 0;} 
原创粉丝点击