我 人 傻 了

P3706 [SDOI2017] 硬币游戏

人给我整傻了,这里写j=i和j=i+1有啥区别吗?还有为啥我这代码开long double 就会T。。。
by linfourxu @ 2020-12-24 12:14:46


为什么把那一段注释掉都可以过
by MatrixCascade @ 2020-12-24 12:39:27


``` for (rint i = 1; i <= n + 1; i++) { for (rint j = i + 1; j <= n + 2; j++) a[i][j] /= a[i][i]; a[i][i] = 1.0; for (rint j = 1; j <= n + 1; j++) { if (i == j) continue; for (rint k = i + 1; k <= n + 2; k++) a[j][k] -= a[j][i] * a[i][k]; a[j][i] = 0.0; } } ``` 可以过,说明可能那个交换是多余的?
by MatrixCascade @ 2020-12-24 12:41:02


@[MatrixCascade](/user/154101) 高斯消元还能不交换?
by linfourxu @ 2020-12-24 13:48:28


@[linfourxu](/user/50477) 我就想测试一下 `pos=i` 占的分数,结果不知道为什么就过了
by MatrixCascade @ 2020-12-24 13:50:46


@[linfourxu](/user/50477) double 不能用 abs 吧,应该改成 fabs,然后改成`if(fabs(a[j][i]) - fabs(a[pos][i])>eps)`
by MatrixCascade @ 2020-12-24 13:58:40


@[MatrixCascade](/user/154101) 而且我一直这么写的/kk
by linfourxu @ 2020-12-24 14:01:35


@[MatrixCascade](/user/154101) cmath里面的abs好像是啥类型都行的,不需要用fabs
by linfourxu @ 2020-12-24 14:04:49


@[linfourxu](/user/50477) 好吧,那可能是我孤陋寡闻了。 /ll 所以高消的部分应该是 ``` if (fabs(a[j][i]) - fabs(a[pos][i]) > minlf) { pos = j; break; } ``` 这样写?
by MatrixCascade @ 2020-12-24 14:04:55


抱歉我一开始没看题面就说
by MatrixCascade @ 2020-12-24 14:05:36


| 下一页