• Comet OJ Contest #15 D. 双十一特惠(困难版)


    以 $d(x)$ 表示正整数 $x$ 的十进制表示的数位之和。熟知下列关于 $d(x)$ 的结论:

    1. $d(x) equiv x pmod{9}$。从而对于任意正整数列 $a_1, a_2, dots, a_n$ 有 $sum_{i=1}^{n} d(a_i) equiv d(sum_{i=1}^{n}a_i) pmod{9}$。
    2. 十进制下,在正整数 $a,b$ 相加的过程中,每发生一次进位数位之和减少 $9$。因而有 $d(a + b) = d(a) + d(b) - 9c(a, b)$。$c(a, b)$ 表示十进制下 $a, b$ 相加发生的进位次数。
    3. 正整数 $x$ 可表为 $sum_{i =1 }{n}10{e_i}$ 且 $n$ 可以取到等差数列 $x, x - 9, x -18, dots, d(x)$ 中的每一个值。证明:考虑下述过程:从 $x$ 个 1 开始,此时 $n = x$。若 $xge 10$ 则可以把 $10$ 个 1 变成 $1$ 个 10,使 $n$ 变为 $x - 9$;不断如此操作直到剩下不足 $10$ 个 1。继续对剩下的 10 进行类似的操作。如此反复操作,直到无法操作。

    十进制下 $k$ 个连续的 1 可表为 $frac{10^{k} - 1}{9}$。
    题目所问相当于 $argmin_{n} v = sum_{i=1}^{n} frac{10^{e_i} - 1}{9}$($e_i ge 1$) 即 $argmin_{n} 9v+n = sum_{i=1}^{n} 10^{e_i}$。根据上述结论 1 和 3,$n$ 只要满足

    • $d(9v+n) equiv n pmod{9}$
    • $n ge d(9v+n)$

    即可。

    因此可以枚举 $n$。下面给出答案的上界。令 $t = 9v$,注意到 $d(t) equiv 0pmod{9}$,反复进行下列操作直到 $t$ 变成零:$t o t+ 1$,$t o t - 10^{h}$,$h$ 表示 $t$ 的十进制表示的最高位,例如,若 $t = 234$ 则 $h = 2$。注意到每次操作过后 $d(t)mod 9$ 不变。因此,每次操作之前必有 $tge 10$,因而有 $hge 1$。 在 $t o t+1$ 这一步,$d(t)$ 至多增加 $1$,而 $t o t-10^h$ 这一步,$d(t)$ 恰好减少 $1$。另外,每 $10$ 次操作之中,必有一次 $t o t+1$ 使个位发生进位,在这个操作后 $d(t)$ 至少减少 $10$。因此每 $10$ 次操作过后 $d(t)$ 至少减少 $10$,因此答案不超过 $d(9v) + 10$。

    注:

    1. 本文参考了源曲明的题解
    2. $d(9v + n) equiv n pmod{9}$ 即 $d(n) equiv n pmod{9}$。

    官方题解:

    这个思路比我上面的思路要好得多。下面对官方题解作几个注解:

    1. 由于 $x > 0$ 且 $9v + x$ 是 $10$ 的倍数,因此可以不用管 $9v$ 的个位,直接往 $9v$ 的十位不断加一。
  • 相关阅读:
    HDU4003 Find Metal Mineral
    POJ1125 Stockbroker Grapevine
    HDU4028The time of a day
    弱校ACM奋斗史
    POJ1236 Network of Schools
    HDU4004 The Frog's Games
    HDU4001 To Miss Our Children Time
    POJ2186 Popular Cows
    POJ1094 Sorting It All Out
    hadoop2.7.1单机和伪集群的搭建0
  • 原文地址:https://www.cnblogs.com/Patt/p/11927718.html
Copyright © 2020-2023  润新知