1 条题解

  • 0
    @ 2025-10-23 19:43:26

    题意翻译

    书有若干页,页码从 1 开始。

    kk 页一定是插图页(没有页码标注)。

    剩下的页中,有些是文本页(有页码标注),有些是插图页(无页码标注)。

    文本页上标有该页的页码。

    所有文本页的页码之和为 ss

    我们不知道书的总页数 nn,也不知道哪些页是文本页,只知道 kkss

    问:在所有可能的书中,插图页的最少数量是多少?


    已知条件

    kk 页全是插图页(数量 = kk)。

    文本页的页码总和 = ss

    文本页的页码互不相同(因为每页的页码唯一),且页码必须 1\ge 1,且文本页不能在前 kk 页中(因为前 kk 页是插图页)。

    所以文本页的页码选自 k+1,k+2,,n{k+1, k+2, \dots, n},其中 nn 是书的总页数。


    问题转化

    设文本页的数量为 tt,那么它们的页码是 tt 个不同的整数,每个 k+1\ge k+1,且和为 ss

    我们要最小化插图页的数量。

    插图页数量 = 前 kk 页的插图页 kk + 后 nkn-k 页中的插图页 (nkt)(n-k - t)

    所以总插图页数:

    ill=k+(nkt)=ntill=k+(n−k−t)=n−t

    目标

    最小化 ntn - t,等价于在满足条件的情况下,最小化 nn(因为 tt 固定时,nn 越小,插图页越少)。


    条件分析

    已知:

    tt 个文本页,页码选自 k+1,k+2,,n{k+1, k+2, \dots, n},且互不相同。

    它们的和 = ss

    我们要找最小的 nn,使得存在这样的 tt 个不同整数(在 k+1k+1nn 之间),和为 ss


    思路

    对于给定的 nn,最小的可能和是选最小的 tt 个数:(k+1)+(k+2)++(k+t)(k+1) + (k+2) + \dots + (k+t)

    最大的可能和是选最大的 tt 个数:(nt+1)+(nt+2)++n(n-t+1) + (n-t+2) + \dots + n

    所以必须存在某个 tt 使得:

    $$\sum_{i=1}^{t} (k + i) \leq s \leq \sum_{i=1}^t (n-t+i) $$

    即:

    $$tk + \frac{t(t+1)}{2} \leq s \leq t n - \frac{t(t-1)}{2} $$

    目标函数

    我们想最小化 nn,所以对于每个 tt,从最小和条件得到 tt 的下界,从最大和条件得到 nn 的下界。

    stnt(t1)2s \le t n - \frac{t(t-1)}{2} 得:

    ns+t(t1)2tn \geq \frac{s + \frac{t(t-1)}{2}}{t}

    因为 nn 是整数,所以:

    $$n \geq \left\lceil \frac{s + \frac{t(t-1)}{2}}{t} \right\rceil $$

    同时 nk+tn \ge k+t(因为文本页有 tt 页,编号最大为 nn,且最小编号为 k+1k+1,所以 nk+tn \ge k+t 不一定必须,其实编号最大是 nn,最小是 k+1k+1,所以 nk+tn \ge k+t 是必须的,因为文本页不能重叠且必须不同页)。


    枚举 tt

    我们枚举 tt 从 1 到某个上界,上界是多少?

    最小和 tk+t(t+1)/2stk + t(t+1)/2 \le s 必须成立,否则 tt 太大不行。

    另外,tt 不能超过 nkn-k,但 nn 我们不知道,所以先不管。

    实际上,tt 的上界可以大致估计:最小和超过 ss 就停止。


    算法步骤

    初始化答案 ans=ans = \infty

    枚举 t=1,2,t = 1, 2, \dots 直到 tk+t(t+1)/2>st k + t(t+1)/2 > s

    检查 tk+t(t+1)/2st k + t(t+1)/2 \le s

    计算 $n_{\min} = \max\left(k+t,\ \lceil (s + t(t-1)/2) / t \rceil\right)$。

    检查可行性:最大和 tnmint(t1)/2st n_{\min} - t(t-1)/2 \ge s 必须成立(由 nminn_{\min} 定义已保证)。

    更新 ans=min(ans,nmint)ans = \min(ans, n_{\min} - t)

    输出 ansans


    样例验证

    样例:k=1,s=8k=1, s=8

    枚举 tt

    t=1t=1:最小和 1+1=281 + 1 = 2 \le 8,$n_{\min} = \max(1+1=2, \lceil (8+0)/1 \rceil=8) = 8$,插图页 =81=7= 8-1=7

    t=2t=2:最小和 2+3=582 + 3 = 5 \le 8nmin=max(3,(8+1)/2=5)=5n_{\min} = \max(3, \lceil (8+1)/2 \rceil=5) = 5,插图页 =52=3= 5-2=3

    t=3t=3:最小和 3+6=9>83 + 6 = 9 > 8,停止。

    最小插图页 = min(7,3)=3\min(7,3) = 3,输出 3,符合样例。


    时间复杂度

    tt 的上界大约是 O(s)O(\sqrt{s}),因为 t2/2st^2/2 \approx s 时停止。对于 s1012s \le 10^{12}t2×106t \le 2\times 10^6 左右,可行。

    • 1

    信息

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