社区讨论

疑问求解

P2455[SDOI2006] 线性方程组参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mi88nnq1
此快照首次捕获于
2025/11/21 10:26
3 个月前
此快照最后确认于
2025/11/21 13:10
3 个月前
查看原帖
以下代码无法通过 hack 数据最后一个测试点,显示答案错误:
CPP
#include <bits/stdc++.h>
using namespace std;
int n, ans_cnt;
double a[105][105], ans[105], dt = 1e-6;

int slove() {
    for (int i = 0; i < n; ++i) {
        int maxx = i;
        for (int j = 0; j < n; ++j) {
            if (j < i && abs(a[j][j]) >= dt) continue;
            if (a[j][i] > a[maxx][i]) maxx = j;
        }
        for (int j = 0; j <= n; ++j)
            swap(a[maxx][j], a[i][j]);
        if (abs(a[i][i]) < dt) continue;
        double tmp = a[i][i];
        for (int j = 0; j <= n; ++j)
            a[i][j] /= tmp;
        for (int j = 0; j < n; ++j) {
            if (j == i) continue;
            double rate = a[j][i];
            for (int k = 0; k <= n; ++k)
                a[j][k] -= a[i][k] * rate;
        }
    }
    bool all_zero = false;
    for (int i = 0; i < n; ++i) {
        bool flag = true;
        for (int j = 0; j < n; ++j)
            if (abs(a[i][j]) >= dt) flag = false;
        if (flag && abs(a[i][n]) >= dt) return -1;
        if (flag) all_zero = true;
    }
    return all_zero ? 0 : 1;
}

int main() {
    cin >> n;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j <= n; ++j)
            scanf("%lf", &a[i][j]);
    }
    int ret = slove();
    if (ret == 1) {
        for (int i = 0; i < n; ++i)
            printf("%.2lf\n", a[i][n]);
    } else printf("%d", ret);
    return 0;
}
问题出在高亮处,改为:
CPP
printf("%.2lf\n", a[i][n] / a[i][i]);
就可以通过,可我在消元过程中保证主元系数为 11,但根据反馈,错误测试点首项主元系数为 2-2,求问这是什么问题。

回复

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

正在加载回复...