社区讨论
疑问求解
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;
}
问题出在高亮处,改为:
CPPprintf("%.2lf\n", a[i][n] / a[i][i]);
就可以通过,可我在消元过程中保证主元系数为 ,但根据反馈,错误测试点首项主元系数为 ,求问这是什么问题。
回复
共 0 条回复,欢迎继续交流。
正在加载回复...