社区讨论

神奇代码——高斯消元求调

P4035[JSOI2008] 球形空间产生器参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@m666x7i3
此快照首次捕获于
2025/01/21 16:05
去年
此快照最后确认于
2025/11/04 11:07
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>

using namespace std;
double a[20][20], b[20], c[20][20];

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n + 1; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> a[i][j];
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            c[i][j] = 2 * (a[i][j] - a[i + 1][j]);
            b[i] += a[i][j] * a[i][j] - a[i - 1][j] * a[i - 1][j];
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = i; j <= n; j++) {
            if (fabs(c[j][i]) > 1e-8) {
                for (int k = 1; k <= n; k++) {
                    swap(c[i][k], c[j][k]);
                }
                swap(b[i], b[j]);
            }
        }
        for (int j = 1; j <= n; j++) {
            if (i == j) continue;
            double _ = c[j][i] / c[i][i];
            for (int k = 1; k <= n; k++) {
                c[j][k] -= c[i][k] * _;
            }
            b[j] -= b[i] * _;
        }
    }
    for (int i = 1; i <= n; i++) printf("%.3lf ", b[i] / c[i][i]);
    printf("\n");
    return 0;
}
蒙了

回复

3 条回复,欢迎继续交流。

正在加载回复...