#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
int N;
std::vector<double> a[105];
int Find(int line, int colu) {
int result = line;
for (int i = line + 1; i <= N; ++ i)
if (std::fabs(a[result][colu]) < std::fabs(a[i][result]))
result = i;
return result;
}
int main() {
// freopen("1.in", "r", stdin);
scanf("%d", &N);
for (int i = 1; i <= N; ++ i)
a[i].resize(N + 3);
// std::cerr << -1 << std::endl;
for (int i = 1; i <= N; ++ i)
for (int j = 1; j <= N + 1; ++ j)
scanf("%lf", &a[i][j]);
// std::cerr << a[i][j] << " ";
// }
// std::cout << '\n';
// }
// std::cout << -1 << std::endl;
// for (int i = 1; i <= N; ++ i) {
// for (int j = 1; j <= N + 1; ++ j) {
// std::cout << a[i][j] << " ";
// }
// std::cout << std::endl;
// }
int work = 0;
for (int colu = 1, line = 1; colu <= N; ++ colu) {
// std::cout << -1 << std::endl;
int pivot = Find(line, colu);
// std::cout << pivot << std::endl;
if (std::fabs(a[pivot][colu]) <= 1e-8)
continue;
std::swap(a[line], a[pivot]);
// for (int i = 1; i <= N; ++ i) {
// for (int j = 1; j <= N + 1; ++ j) {
// std::cout << a[i][j] << " ";
// }
// std::cout << '\n';
// }
for (int j = 1; j <= N; ++ j) {
if (line == j)
continue;
double tem = a[j][colu] / a[line][colu];
for (int k = colu; k <= N + 1; ++ k)
a[j][k] -= tem * a[line][k];
}
line ++;
work = line;
}
if (work != N + 1) {
for (int i = work; i <= N; ++ i) {
if (std::fabs(a[i][N + 1]) <= 1e-8) {
printf("-1\n");
return 0;
}
}
printf("No Solution\n");
return 0;
}
for (int i = 1; i <= N; ++ i) {
// std::cout << a[i][N + 1] / a[i][i] << '\n';
printf("%.2lf\n", a[i][N + 1] / a[i][i]);
}
return 0;
}
第一个点在linux上输出的是 NoSolution,但测评姬的是 −1。为啥啊,求教教QAQ