assert 不对也能 AC ?
查看原帖
assert 不对也能 AC ?
371409
Dangerise楼主2025/1/25 11:34
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

2025/1/25 11:34
加载中...