1 条题解

  • 0
    @ 2026-4-2 21:01:45

    题意回顾

    你有 nn 种数字的卡牌,第 ii 种有 aia_i 张。
    你可以购买最多 kk 张新卡牌(数字任意)。
    之后,将所有卡牌分成若干副套牌,要求:

    1. 所有套牌大小相同(记为 ss);
    2. 每副套牌内,数字互不相同。

    求最大可能的 ss


    关键观察

    • 因为只有 nn 种数字,所以每副套牌最多包含 nn 张牌(每种数字最多一张),因此 答案 sns \le n

    第一步:k=0k=0 的情况(不购买)

    设:

    • 总卡牌数 m=i=1naim = \sum_{i=1}^n a_i
    • 最大频率 x=max(ai)x = \max(a_i)

    要能分成大小为 ss 的套牌,必须满足:

    1. sms \mid m(总牌数能被 ss 整除,才能正好分完);
    2. xmsx \le \frac{m}{s}(每种数字最多出现在每副牌一次,所以最多只能有 ms\frac{m}{s} 副牌,即每种数字最多 ms\frac{m}{s} 张)。

    证明(充分性)
    如果上述两条件成立,设 d=m/sd = m/s 为套牌数量。
    每次从剩余牌中选 ss 种不同的牌(优先选剩余数量最多的 ss 种)组成一副牌,可以证明这个过程能一直进行下去(类似 1954D - Colored Balls 或 abc227_d - Project Planning 的贪心构造)。

    因此,k=0k=0 时,能分出的最大 ss 是满足以上两个条件的最大 ss


    第二步:一般 kk 的情况

    我们想判断能否让套牌大小达到某个 ss

    设最终套牌数为 d=总牌数sd = \frac{\text{总牌数}}{s}

    由于每种数字在每副牌中最多出现一次,所以最终每种数字的牌数不能超过 dd

    因此,对于第 ii 种数字:

    • 如果 ai>da_i > d,我们必须通过购买来增加别的数字,但无法减少 aia_i,所以 dd 必须 ai\ge a_i
      不对,我们无法降低 aia_i,但可以通过买其他牌来让 dd 变大?
      其实 dd 是最终总牌数除以 ss,而 ss 是我们试的值,dd 会变化。
      更直接的方法:

    关键推导

    最终套牌数 dd 满足:

    • 每副牌大小 ss,共 dd 副牌,总牌数 =sd= s \cdot d
    • 每种数字最多出现 dd 次,所以原来就多的数字(ai>da_i > d)已经超过了允许值,除非我们买其他牌来增加 dd
      不,dd 是全局的,aia_i 是固定的(未买之前),买卡只能增加总牌数,但每种数字的最终张数 = ai+购买数量ia_i + \text{购买数量}_i,这必须 d\le d

    因此,对每种 ii,需要购买的数量至少为 max(0,dai)\max(0, d - a_i)
    总购买量:

    need=i=1nmax(0,dai)\text{need} = \sum_{i=1}^n \max(0, d - a_i)

    必须满足 needk\text{need} \le k

    同时,总牌数 = ai+购买量=m+购买量\sum a_i + \text{购买量} = m + \text{购买量},并且等于 sds \cdot d

    所以:

    sd=m+购买量s \cdot d = m + \text{购买量}

    其中 0购买量k0 \le \text{购买量} \le k


    换一个角度(更常用)

    我们想判断 ss 是否可行。

    d=max(ai)sd = \lceil \frac{\max(a_i)}{s} \rceil
    不对,更常见的方法:

    最终套牌数 dd 必须 max(ai)\ge \max(a_i),因为每种数字最多 dd 张。
    同时,总牌数 = sdms \cdot d \ge m

    我们可以自由买卡,所以最终总牌数可以是 mmm+km+k 之间的任意值(只要不超 kk 张)。

    因此,对给定的 ss,我们想找 dd 满足:

    1. dmax(ai)d \ge \max(a_i)
    2. sdms \cdot d \ge m
    3. sdm+ks \cdot d \le m + k(因为最多买 kk 张);
    4. 并且购买量 = sdmks \cdot d - m \le k(这其实就是条件 3)。

    还要检查每种数字的最终张数 d\le d
    对每个 ii,最终张数 = ai+ia_i + \text{买}_i,我们可以控制买多少张 ii,只要总购买量 k\le k
    最紧张的情况是 aia_i 很大,比如 ai>da_i > d,那不可能,因为即使不买这种,它已经超过 dd 了。
    所以必须有:

    max(ai)d\max(a_i) \le d

    dmax(ai)d \ge \max(a_i),这正是条件 1。

    因此,ss 可行的条件是:存在整数 dd 使得:

    • dmax(ai)d \ge \max(a_i)
    • sdms \cdot d \ge m
    • sdm+ks \cdot d \le m + k

    化简

    dmax(ai)d \ge \max(a_i)sdms \cdot d \ge m 得:

    $$d \ge \max\left(\max(a_i), \lceil \frac{m}{s} \rceil \right) $$

    令 $d_{\min} = \max\left(\max(a_i), \lceil \frac{m}{s} \rceil \right)$。

    那么需要存在 ddmind \ge d_{\min}sdm+ks \cdot d \le m + k

    最小的 sds \cdot dd=dmind = d_{\min} 时取得,为 sdmins \cdot d_{\min}
    如果 sdminm+ks \cdot d_{\min} \le m + k,那么我们可以取 d=dmind = d_{\min} 并购买 sdminms \cdot d_{\min} - m 张牌(这个数 0\ge 0k\le k)。
    如果 sdmin>m+ks \cdot d_{\min} > m + k,那么即使取最小可能的 dd 也超过允许的总牌数,不可行。

    因此,ss 可行的充要条件是:

    $$s \cdot \max\left(\max(a_i), \lceil \frac{m}{s} \rceil \right) \le m + k $$

    第三步:求解最大 ss

    由于 sns \le nnn 的总和 2×105\le 2\times 10^5,我们可以对每个测试用例从 s=ns = n 向下枚举第一个可行的 ss,或者直接枚举 ss 并检查。

    复杂度 O(n)O(n) 每个测试用例(因为枚举 ss 并计算条件一次 O(1)O(1))。


    最终算法

    对每个测试用例:

    1. 计算 m=aim = \sum a_ix=max(ai)x = \max(a_i)
    2. ssnn 往下到 11
      • 计算 dmin=max(x,m/s)d_{\min} = \max(x, \lceil m/s \rceil)
      • 如果 sdminm+ks \cdot d_{\min} \le m + k,输出 ss 并结束。

    由于 nn 总和小,直接循环可行。


    示例验证

    以第一个样例: n=3,k=1,a=[3,2,2]n=3,k=1,a=[3,2,2]
    m=7,x=3m=7,x=3

    • s=3s=3dmin=max(3,7/3=3)=3d_{\min}=\max(3,\lceil7/3\rceil=3)=333=9>m+k=83\cdot3=9 > m+k=8,不可行。
    • s=2s=2dmin=max(3,7/2=4)=4d_{\min}=\max(3,\lceil7/2\rceil=4)=424=882\cdot4=8 \le 8,可行,输出 22

    匹配答案。


    这样,我们就得到了一个清晰、可实现的 O(n)O(n) 解法。

    • 1

    信息

    ID
    6258
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    2
    已通过
    1
    上传者