1 条题解

  • 0
    @ 2026-9-9 8:52:25

    题解

    思路

    交换红、蓝两袋不会改变得分,所以可以假设第一包中 a1a_1 进入红袋、b1b_1 进入蓝袋。

    做法

    于是最终红袋 gcd 的任意因数必为 a1a_1 的因数,蓝袋同理。枚举 a1a_1 的因数 xx 与 b1b_1 的因数 yy;对于每个卡包,只要 (ai mod x=0∧bi mod y=0)(a_i\bmod x=0\land b_i\bmod y=0) 或 (bi mod x=0∧ai mod y=0)(b_i\bmod x=0\land a_i\bmod y=0),就能为该包选择一种合法方向,因而这一因数对可行。

    对所有可行因数对取 lcm⁡(x,y)\operatorname{lcm}(x,y) 的最大值。任意真实最优分配的两个 gcd 都会作为某个枚举对出现,所以答案不会被低估;反之,一个可行因数对可以扩展为某个分配,该分配的两个 gcd 分别是 x,yx,y 的倍数,其得分不会小于当前候选,因此取最大值恰好得到最优答案。

    复杂度

    用平方根枚举两个数的因数,复杂度为 O(a1+b1+d(a1)d(b1)N)O(\sqrt{a_1}+\sqrt{b_1}+d(a_1)d(b_1)N),空间复杂度为 O(d(a1)+d(b1))O(d(a_1)+d(b_1))。

    • 1

    信息

    ID
    1514
    时间
    4000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者