社区讨论

assert 不对也能 AC ?

P4777【模板】扩展中国剩余定理(EXCRT)参与者 4已保存回复 7

讨论操作

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

当前回复
6 条
当前快照
1 份
快照标识符
@m6bmzzkm
此快照首次捕获于
2025/01/25 11:34
去年
此快照最后确认于
2025/11/04 10:41
4 个月前
查看原帖
C1
typedef pair<bint,bint> E;

E exgcd(bint a, bint b) {
    if (!b) {
        return {1, 0};
    } else {
        auto [x, y] = exgcd(b, a % b);
        return {y, x - a / b * y};
    }
}

E mge(const E &a, const E &b) {
    bint g = gcd(a.x, b.x);
    bint c = b.y - a.y;
    assert(c % g == 0);
    c /= g;
    bint m = a.x / g, n = b.x / g;
    auto [p, q] = exgcd(m, n);
    p *= c;
    p = (p % n + n) % n;
    bint mod = lcm(a.x, b.x);
    E ret = {mod, (a.x * p + a.y)};
    
    assert(ret.y % a.x == a.y);
    // RE here !
    
    return ret;
}
其中 mge 是对两个同余方程的合并,中间有一个 assert 用来判断合并是否正确,这个 assert 导致 RE on #8 #9,但是去掉之后就可以 AC

回复

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

正在加载回复...