记录编号 |
425334 |
评测结果 |
AAAAAAAAAAAAA |
题目名称 |
[SDOI 2007] 线性方程组 |
最终得分 |
100 |
用户昵称 |
Narcissus |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2017-07-15 08:22:44 |
内存使用 |
0.34 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
inline int read(){
int s=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+ch-'0';ch=getchar();}
return s*f;
}
double s[55][55],eps=1e-8;
int n;
bool inf[55];
inline void gs(){
int i,j,k,r;
for(i=1;i<=n;++i) {
r=i;
for(j=i+1;j<=n;++j)
if (fabs(s[j][i])>fabs(s[r][i])) r=j;
if(fabs(s[r][i])<eps) continue;
if(r!=i) for(j=1;j<=n+1;++j) swap(s[r][j],s[i][j]);
for(k=1;k<=n;++k) if(k!=i)
for(j=n+1;j>=i;--j) s[k][j]-=s[k][i]/s[i][i]*s[i][j];
}
}
int main(){
freopen("gaess.in","r",stdin);
freopen("gaess.out","w",stdout);
n=read();
for(int i=1;i<=n;++i) for(int j=1;j<=n+1;++j) s[i][j]=read();
gs();
//无解:(0,0,0,0,.....,a)
for(int i=n;i>=1;--i)if(fabs(s[i][n+1])>eps){
int js=0;
for(int j=1;j<=n;++j) if(fabs(s[i][j])<eps) js++;
if(js==n) {cout<<-1; return 0;}
}
//无穷解 全0 或者s[i][i]=0,s[i][n+1]!=0
for(int i=n;i>=1;--i){
int js=0;
for(int j=1;j<=n+1;++j) if(fabs(s[i][j])<eps) js++;
if(js==n+1) {cout<<0; return 0;}
}
for(int i=1;i<=n;++i) if(fabs(s[i][i])<eps&&fabs(s[i][n+1])>eps){
cout<<0;return 0;
}
for(int i=1;i<=n;++i) {
if(s[i][n+1]==0) printf("x%d=%d\n",i,0);
else printf("x%d=%.2lf\n",i,s[i][n+1]/s[i][i]);
}
}