模板特殊情况没exit(0) $longrightarrow$60 了一下午
//#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define R(a,b,c) for(register int a = (b); a <= (c); ++ a)
#define nR(a,b,c) for(register int a = (b); a >= (c); -- a)
#define Max(a,b) ((a) > (b) ? (a) : (b))
#define Min(a,b) ((a) < (b) ? (a) : (b))
#define Fill(a,b) memset(a, b, sizeof(a))
#define Abs(a) ((a) < 0 ? -(a) : (a))
#define Swap(a,b) a^=b^=a^=b
#define ll long long
#define ON_DEBUG
#ifdef ON_DEBUG
#define D_e_Line printf("
----------
")
#define D_e(x) cout << #x << " = " << x << endl
#define Pause() system("pause")
#define FileOpen() freopen("in.txt","r",stdin);
#else
#define D_e_Line ;
#define D_e(x) ;
#define Pause() ;
#define FileOpen() ;
#endif
struct ios{
template<typename ATP>ios& operator >> (ATP &x){
x = 0; int f = 1; char c;
for(c = getchar(); c < '0' || c > '9'; c = getchar()) if(c == '-') f = -1;
while(c >= '0' && c <= '9') x = x * 10 + (c ^ '0'), c = getchar();
x*= f;
return *this;
}
}io;
using namespace std;
const int N = 107;
const double eps = 1e-8;
int n;
double a[N][N], ans[N];
inline double fabs(double a){
return a < 0 ? -a : a;
}
inline void Gauss(){
R(i,1,n){
int r = i;
R(j,i + 1,n)
if(fabs(a[j][i]) > fabs(a[r][i]))
r = j;
if(i != r) swap(a[i], a[r]);
if(fabs(a[i][i]) > eps){
R(j,1,n){
if(i == j) continue;
double s = a[j][i] / a[i][i];
R(k,1,n + 1)
a[j][k] -= s * a[i][k];
}
}
}
int flagNo = 0, flagInf = 0;
R(i,1,n){
int tot = 0;
R(j,1,n + 1){
if(fabs(a[i][j]) < eps)
++tot;
else
break;
}
if(tot == n + 1) flagInf = 1;
else if(tot == n && fabs(a[i][n + 1]) > eps) flagNo = 1;
}
if(flagNo == 1){ printf("-1"); exit(0);}
if(flagInf == 1){ printf("0"); exit(0);}
nR(i,n,1){
ans[i] = a[i][n + 1] / a[i][i];
nR(j,i - 1,1){
a[j][n + 1] -= a[j][i] * ans[i];
}
}
}
int main(){
io >> n;
R(i,1,n){
R(j,1,n + 1){
scanf("%lf", &a[i][j]);
}
}
Gauss();
R(i,1,n){
// if(fabs(ans[i]) < eps)
// printf("x%d=0
", i);
// else
printf("x%d=%.2lf
", i, ans[i]);
}
return 0;
}