关于 Luogu IDE 输出结果和其测评结果不一样这回事情

P3389 【模板】高斯消元法

附:代码 ```cpp #include<bits/stdc++.h> using namespace std; const int maxn = 1010; int n,row[maxn];//row: 本行非空列 double a[maxn][maxn], b[maxn]; double x[maxn]; bool use[maxn];//use: 本行是否使用过 inline int getmaxline(const int& row) { int ans = 0;//默认为0,如返回0,则说明所有行绝对值都是0,即 无数解或无解 double mx = 0; for (int i = 1; i <= n; ++i) if (!use[i] && abs(a[i][row]) > mx) ans = i, mx = abs(a[i][row]); return ans; } inline void addto(const int& i, const int& j, const int& beg, const double& v) { b[j] += b[i] * v; for (int k = beg; k <= n; ++k) a[j][k] += a[i][k] * v; } int main() { cin >> n; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) cin >> a[i][j]; cin >> b[i]; } for (int i = 1; i <= n; ++i) { int li = getmaxline(i); if (li == 0) return cout << "No Solution\n",0; use[li] = 1; row[li] = i; for (int j = 1; j <= n; ++j) { if (j == li) continue; addto(li, j, i, -a[j][i] / a[li][i]); } } for (int i = 1; i <= n; ++i) x[row[i]] = b[i] / a[i][row[i]]; for (int i = 1; i <= n; ++i) cout << fixed << setprecision(2) << x[i] << '\n'; } ```
by Editzed @ 2022-09-25 18:02:11


这种情况大概率是写了UB,我来查查
by Etinorally @ 2022-09-25 18:05:41


@[Editzed](/user/515990) 不是你这个代码不是能AC吗?
by Etinorally @ 2022-09-25 18:06:32


开了 o2 就会 wa 一个点,绝对ub
by Krystallos @ 2022-09-25 18:14:50


@[Editzed](/user/515990) 你为什么不加`return 0`?
by OoXiao_QioO @ 2022-09-25 18:29:39


原因是你没有判 $a_{i,i}<=eps$
by beauty_son_whm @ 2022-10-21 19:55:40


@[Editzed](/user/515990)
by beauty_son_whm @ 2022-10-21 19:55:59


|