只有第一个测试点WA
代码:
#include <iostream>
using namespace std;
typedef long long ll;
const ll maxn = 105;
const double eps = 1e-8;
double m[maxn][maxn], ans[maxn];
ll n;
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n + 1; j++)
cin >> m[i][j];
for (int i = 1; i <= n; i++) {
ll r = i;
for (int j = i + 1; j <= n; j++)
if (abs(m[j][i]) > abs(m[r][i]))
r = j;
if (abs(m[r][i]) < eps) {
cout << "No solution" << endl;
return 0;
}
swap(m[i], m[r]);
double t = m[i][i];
for (int j = 1; j <= n + 1; j++)
m[i][j] /= t;
for (int j = i + 1; j <= n; j++) {
t = m[j][i];
for (int k = i + 1; k <= n + 1; k++)
m[j][k] -= m[i][k] * t;
}
}
ans[n] = m[n][n + 1];
for (ll i = n - 1; i >= 1; i--) {
ans[i] = m[i][n + 1];
for (ll j = i + 1; j <= n; j++)
ans[i] -= (ans[j] * m[i][j]);
}
for (ll i = 1; i <= n; i++)
printf("%0.2lf\n", ans[i]);
return 0;
}