rt
悬 2 关
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e2 + 5;
const double inf = 100000005.0;
int n;
double a[N][N], res[N];
signed main() {
cin >> n;
for (int i = 1; i <= n; ++ i)
for (int j = 1; j <= n + 1; ++ j)
cin >> a[i][j];
for (int k = 1; k < n; ++ k) {
double maxn = -inf;
int id = 0;
for (int i = k; i <= n; ++ i) {
if (a[i][k] > maxn && a[i][k]) {
maxn = a[i][k];
id = i;
}
}
for (int i = 1; i <= n + 1; ++ i) {
double t = a[k][i];
a[k][i] = a[id][i];
a[id][i] = t;
}
for (int i = k + 1; i <= n; ++ i)
for (int j = n + 1; j >= 1; -- j)
a[i][j] = (a[i][j] * 1.0 - a[i][k] * a[k][j] * 1.0 / a[k][k]);
}
int flagA = 0, flagB = 0;
for (int i = n; i >= 1; -- i) {
for (int j = i + 1; j <= n; ++ j) {
a[i][n + 1] -= (a[i][j] * res[j]);
}
int flag = 0;
for (int j = 1; j <= n; ++ j) flag += a[i][j] ? 1 : 0;
if (!flag && a[i][n + 1]) flagA = 1;
else if (!flag && !a[i][n + 1]) flagB = 1;
else res[i] = a[i][n + 1] * 1.0 / a[i][i];
}
if (flagA) {
cout << "-1\n";
return 0;
}
else if (flagB) {
cout << "0\n";
return 0;
}
for (int i = 1; i <= n; ++ i)
printf("x%lld=%.2lf\n", i, res[i]);
return 0;
}