80分 WA #3 #7 #11 #14
查看原帖
80分 WA #3 #7 #11 #14
532992
Blikewsr楼主2024/11/19 14:12

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;
}

record

2024/11/19 14:12
加载中...