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\)。若 \(x\ge 10\) 则可以把 \(10\) 个 1 变成 \(1\) 个 10,使 \(n\) 变为 \(x - 9\);不断如此操作直到剩下不足 \(10\) 个 1。继续对剩下的 10 进行类似的操作。如此反复操作,直到无法操作。

十进制下 \(k\) 个连续的 1 可表为 \(\frac{10^{k} - 1}{9}\)
题目所问相当于 \(\arg\min_{n} v = \sum_{i=1}^{n} \frac{10^{e_i} - 1}{9}\)\(e_i \ge 1\)) 即 \(\arg\min_{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 0\pmod{9}\),反复进行下列操作直到 \(t\) 变成零:\(t \to t+ 1\)\(t \to t - 10^{h}\)\(h\) 表示 \(t\) 的十进制表示的最高位,例如,若 \(t = 234\)\(h = 2\)。注意到每次操作过后 \(d(t)\bmod 9\) 不变。因此,每次操作之前必有 \(t\ge 10\),因而有 \(h\ge 1\)。 在 \(t \to t+1\) 这一步,\(d(t)\) 至多增加 \(1\),而 \(t \to t-10^h\) 这一步,\(d(t)\) 恰好减少 \(1\)。另外,每 \(10\) 次操作之中,必有一次 \(t \to 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\) 的十位不断加一。
posted @ 2019-11-25 14:46  Pat  阅读(178)  评论(0编辑  收藏  举报