| 记录编号 |
415031 |
评测结果 |
AAAAAAAAAAAAA |
| 题目名称 |
721.[SDOI 2006] 线性方程组 |
最终得分 |
100 |
| 用户昵称 |
Hallmeow |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
0.000 s |
| 提交时间 |
2017-06-15 15:58:34 |
内存使用 |
0.00 MiB |
显示代码纯文本
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
#define pos2(i,a,b) for(int i=(a);i>=(b);i--)
#define N 600
using namespace std;
int n;
double a[N][N],b[N],x[N];
int flag;
void swap(double &xx,double &yy)
{
double temp;
temp=xx;
xx=yy;
yy=temp;
}
int gauss()
{
double t;
int im,num=1;
for(int k=1;k<n;k++,num++)
{
im=k;
pos(i,k+1,n)
if(fabs(a[i][k])>fabs(a[im][k]))
im=i;
if(im!=k)
{
pos(i,k,n)
swap(a[num][i],a[im][i]);
swap(b[num],b[im]);
}
if(!a[num][k])
{
num--;
continue;
}
pos(i,num+1,n)
{
if(!a[num][k])
continue;
t=a[i][k]/a[num][k];
pos(j,k,n+1)
a[i][j]-=t*a[k][j];
b[i]-=t*b[k];
}
}
pos(i,num,n)
if(!a[i][n]&&b[i])
return -1;
pos2(i,n,1)
{
pos2(j,n,i+1)
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 haha()
{
freopen("gaess.in","r",stdin);
freopen("gaess.out","w",stdout);
scanf("%d",&n);
pos(i,1,n)
{
pos(j,1,n)
scanf("%lf",&a[i][j]);
scanf("%lf",&b[i]);
}
flag=gauss();
if(flag!=1)
printf("%d",flag);
else
pos(i,1,n)
{
if(!x[i])
printf("x%d=0\n",i);
else
printf("x%d=%0.2lf\n",i,x[i]);
}
//while(1);
return 0;
}
int sb=haha();
int main()
{;}