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$ 的十位不断加一。
原文地址:https://www.cnblogs.com/Patt/p/11927718.html