记录编号 |
390615 |
评测结果 |
AAAAAAAAAAAAA |
题目名称 |
[SDOI 2007] 线性方程组 |
最终得分 |
100 |
用户昵称 |
xyz117 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.006 s |
提交时间 |
2017-04-03 15:49:09 |
内存使用 |
0.34 MiB |
显示代码纯文本
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int n,m;
double a[60][60],b[60],x[60];
void swap(double &xx,double &yy)
{
double t;
t=xx;
xx=yy;
yy=t;
}
int gauss()
{
double t;
int im,num=1;
for(int k=1;k<n;k++,num++)
{
im=k;
for(int i=k+1;i<=n;i++)
if(fabs(a[i][k])>fabs(a[im][k]))
im=i;
if(im!=k)
{
for(int i=k;i<=n;i++)
swap(a[num][i],a[im][i]);
swap(b[num],b[im]);
}
if(!a[num][k])
{
num--;
continue;
}
for(int i=num+1;i<=n;i++)
{
if(!a[num][k])
continue;
t=a[i][k]/a[num][k];
for(int j=k;j<=n+1;j++)
a[i][j]-=t*a[k][j];
b[i]-=t*b[k];
}
}
for(int i=num;i<=n;i++)
if(!a[i][n]&&b[i])
return -1;
for(int i=n;i>=1;i--)
{
for(int j=n;j>=i+1;j--)
b[i]-=a[i][j]*x[j];
if(!a[i][i]&&b[i]!=0)
return -1;
if(!a[i][i]&&!b[i])
return 0;
x[i]=b[i]/a[i][i];
}
return 1;
}
int main()
{
freopen("gaess.in","r",stdin);
freopen("gaess.out","w",stdout);
int s;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
scanf("%lf",&a[i][j]);
scanf("%lf",&b[i]);
}
s=gauss();
if(s!=1)
printf("%d",s);
else
for(int i=1;i<=n;i++)
{
if(x[i]==0)
printf("x%d=0\n",i);
else
printf("x%d=%.2lf\n",i,x[i]);
}
}