1 条题解

  • 0
    @ 2025-8-24 21:41:00

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar _rqy
    **

    搬运于2025-08-24 21:41:00,当前版本为作者最后更新于2019-07-09 11:30:51,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这题题解竟然一个证明正确的都没有...

    许多题解考虑类似小凯的疑惑使用 ababab-a-b 的结论,然而这个结论只在 gcd(a,b)=1\gcd(a,b)=1 时适用。注意到所有数的 gcd\gcd11 不意味着存在两个数互质(比如 6,10,156,10,15),因此这个结论是不能直接套的。

    考虑确定一个最大的不能被表示出来的数(如果存在)的上界。

    如果所有的数的 gcd\gcd 不为 11,那么显然是不存在最大的不能表示出来的数的(任取一个不被 gcd\gcd 整除的数都不能被凑出来)。

    设输入的所有数为 a1ana_1\dots a_n,可以发现如果一个数 kk 能凑出来,那么 k+a1k+a_1 也能凑出来;反过来说如果 kk 不能凑出来,那么 ka1k-a_1 也显然不能凑出来。

    这样的话,对于任意的 i=0a11i=0\dots a_1-1,一定存在一个数 fif_i,使得 fii(moda1)f_i \equiv i \pmod{a_1}fif_i 能被凑出来但是 fia1f_i-a_1 不能(换句话说,fif_i 就是 i,i+a1,i+2a1i, i+a_1, i+2a_1\dots 里面第一个能被凑出来的数)。

    由于所有数的 gcd\gcd11,所以对于任意一个数 ii 都能找到一串 k1,k2kpk_1,k_2\dots k_p 使得 ak1+ak2++akpi(moda1)a_{k_1}+a_{k_2}+\dots+a_{k_p}\equiv i\pmod{a_1},所以一定有 fiak1+ak2++akpf_i\leq a_{k_1}+a_{k_2}+\dots+a_{k_p}。取其中最短的(pp 最小的)一串 aa,我们来证明 p<a1p<a_1

    如果 pa1p\geq a_1,令 Sj=(ak1+ak2+akj)moda1S_j=(a_{k_1}+a_{k_2}+\dots a_{k_j})\bmod a_1 即这一串 aa 的前缀和,那么 0Sj<a10\leq S_j<a_1,因此 SjS_j 只有 a1a_1 中取值方式。根据鸽巢原理,S0,S1Sa1S_0,S_1\dots S_{a_1} 中必定有两个相等,记为 Sl,SrS_l,S_r,那么将 al+1,al+2ara_{l+1},a_{l+2}\dots a_r 从这一串 aa 中去掉,可以发现剩下的 aa 的和仍然 i(moda1)\equiv i\pmod{a_1},与我们选择了最小的 pp 不符。

    因此 p<a1p<a_1,$f_i\leq a_{k_1}+\dots+a_{k_p}\leq p\times\max{a}\leq (a_1-1)\times\max{a}$。

    如果 tt 是某个不能凑出来的数,那么显然 $t\leq f_{t\bmod a_1}-a_1\leq (a_1-1)\times\max{a}-a_1$,于是 tt 的上界不超过 255×256256255\times256-256

    接下来就可以直接背包计算这个上界以下所有的数能不能被凑出来了。代码十分简单,就不贴了qaq。

    • 1

    信息

    ID
    1766
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者