90pts求条
查看原帖
90pts求条
998963
封禁用户楼主2025/2/6 13:29

只有第一个测试点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;
}
2025/2/6 13:29
加载中...