您的位置:首页 > 其它

【高斯消元】HYSBZ 1013 球形空间产生器sphere

2015-07-13 15:31 423 查看
地址

(x1-a1)^2+(x2-a2)^2=(x1-b1)^2+(x-b2)^2

可以得到好多方程

然后解

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <cmath>
using namespace std;
#include <queue>
#include <stack>
#include <vector>
#include <deque>
#include <set>
#include <map>
#define clc(arr, val)    memset(arr, val, sizeof(arr))
#define FOR(i,a,b)  for(int i=a;i<=b;i++)
#define IN   freopen ("in.txt" , "r" , stdin);
#define OUT  freopen ("out.txt" , "w" , stdout);
typedef long long  LL;
typedef unsigned long long  ULL;
const int MAXN = 117;
const int MAXM = 6000010;
const int INF = 0x3f3f3f3f;
const ULL mod = 1<<(ULL)64;
const double eps= 1e-8;
const double pi=acos(-1.0);
#define lson l,m, rt<<1
#define rson m+1,r,rt<<1|1
double a[MAXN][MAXN],x[MAXN];
//方程的左边的矩阵和等式右边的值,求解之后x存的就是结果
int equ,var;//方程数和未知数个数
int Gauss()
{
int i,j,k,col,max_r;
for(k=0,col=0; k<equ&&col<var; k++,col++)
{
max_r=k;
for(i=k+1; i<equ; i++)
if(fabs(a[i][col])>fabs(a[max_r][col]))
max_r=i;
if(fabs(a[max_r][col])<eps)return 0;
if(k!=max_r)
{
for(j=col; j<var; j++)
swap(a[k][j],a[max_r][j]);
swap(x[k],x[max_r]);
}
x[k]/=a[k][col];
for(j=col+1; j<var; j++)a[k][j]/=a[k][col];
a[k][col]=1;
for(i=0; i<equ; i++)
if(i!=k)
{
x[i]-=x[k]*a[i][k];
for(j=col+1; j<var; j++)a[i][j]-=a[k][j]*a[i][col];
a[i][col]=0;
}
}
return 1;
}
double vec[123][23];
int main(void)
{
while (scanf("%d", &var) != EOF)
{
equ=var;
for(int i=0;i<equ+1;i++)
for(int j=0;j<equ;j++) cin>>vec[i][j];
memset(a, 0, sizeof(a));
memset(x, 0, sizeof(x));
for (int i = 0; i < equ; i++)
{
for (int j = 0; j < var ; j++)
{
a[i][j]=2.0*(vec[i][j]-vec[equ][j]);
x[i]+=(vec[i][j]*vec[i][j]-vec[equ][j]*vec[equ][j]);
}
}
Gauss();
printf("%.3f",x[0]);
for (int i = 1; i < var; i++)
printf(" %.3f",x[i]);
printf("\n");
}
return 0;
}
/*
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  高斯