记录编号 |
451578 |
评测结果 |
AAAAAAAAAAAAA |
题目名称 |
[SDOI 2007] 线性方程组 |
最终得分 |
100 |
用户昵称 |
Hallmeow |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.009 s |
提交时间 |
2017-09-17 21:47:45 |
内存使用 |
1.00 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#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 300
using namespace std;
int n,flag;
double b[N],a[N][N],x[N];
void swap(double &aa,double &bb){
double temp=aa;
aa=bb;bb=temp;
}
void guess(){
int num=1;
for(int k=1;k<n;k++,num++){
int im=k;
pos(i,k,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]==0){
num--;continue;
}
pos(i,num+1,n){
if(a[num][k]==0) continue;
double 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]==0&&b[i]!=0){
flag=-1;return;
}
}
pos2(i,n,1){
pos2(j,n,i+1){
b[i]-=a[i][j]*x[j];
}
if(a[i][i]==0&&b[i]!=0){
flag=-1;return;
}
if(a[i][i]==0&&b[i]==0){
flag=0;return;
}
x[i]=b[i]/a[i][i];
}
flag=1;
return;
}
int main(){
freopen("gaess.in","r",stdin);
freopen("gaess.out","w",stdout);
cin>>n;
pos(i,1,n){
pos(j,1,n) cin>>a[i][j];
cin>>b[i];
}
guess();
if(flag==0||flag==-1){
cout<<flag;return 0;
}
pos(i,1,n){
if(x[i]==0) printf("x%d=0\n",i);
else printf("x%d=%.2lf\n",i,x[i]);
}
return 0;
}