以 $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$ 的十位不断加一。

Comet OJ Contest #15 D. 双十一特惠(困难版)的更多相关文章

  1. Comet OJ - Contest #15 题解

    传送门 \(A\) 咕咕 const int N=1005; int a[N],n,T; int main(){ for(scanf("%d",&T);T;--T){ sc ...

  2. Comet OJ - Contest #15(B: 当我们同心在一起 )

    题目链接 题目描述 平面上有 nn 个坐标相异的点,请问当中有多少组非共线的三个点,这三个点的 外心 也在这 nn 个点之中? 输入描述 第一行有一个正整数 nn 代表平面上的点数. 接下来有 nn  ...

  3. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

  4. Comet OJ - Contest #2简要题解

    Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/ ...

  5. Comet OJ - Contest #4--前缀和

    原题:Comet OJ - Contest #4-B https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门 一开始就想着暴力打 ...

  6. Comet OJ - Contest #11 题解&赛后总结

    Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...

  7. Comet OJ - Contest #8

    Comet OJ - Contest #8 传送门 A.杀手皇后 签到. Code #include <bits/stdc++.h> using namespace std; typede ...

  8. Comet OJ - Contest #13-C2

    Comet OJ - Contest #13-C2 C2-佛御石之钵 -不碎的意志-」(困难版) 又是一道并查集.最近做过的并查集的题貌似蛮多的. 思路 首先考虑,每次处理矩形只考虑从0变成1的点.这 ...

  9. Comet OJ - Contest #13 「火鼠的皮衣 -不焦躁的内心-」

    来源:Comet OJ - Contest #13 芝士相关: 复平面在信息学奥赛中的应用[雾 其实是道 sb 题??? 发现原式貌似十分可二项式定理,然后发现确实如此 我们把 \(a^i\) 替换成 ...

随机推荐

  1. sequence_loss的解释

    在做seq2seq的时候,经常需要使用sequence_loss这是损失函数. 现在分析一下sequence_loss这个函数到底在做什么 # coding: utf-8 import numpy a ...

  2. linux crontab 防止周期内为执行完成重复执行

    问题的背景: 我们常常需要通过crontab部署某个脚本运行某些定时任务,但在实际的过程中,一旦处理不好可能导致在同一时刻出现脚本的多个运行副本,比如crontab的调度是每5 分钟运行一次脚本,如果 ...

  3. python输出的高亮显示

    一.语法 1.书写格式 开头部分: \033[显示方式;前景色;背景色m 结尾部分: \033[0m   例如:\033[31;1m测试的文字部分\033[0m   注意: 开头部分的三个参数:显示方 ...

  4. 学密码学一定得学程序(SDUT 2463)

    Problem Description 曾经,ZYJ同学非常喜欢密码学.有一天,他发现了一个很长很长的字符串S1.他很好奇那代表着什么,于是神奇的WL给了他另一个字符串S2.但是很不幸的是,WL忘记跟 ...

  5. windows游戏编程X86 32位保护模式下的内存管理概述(二)

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22448323 作者:jadeshu   邮箱: jades ...

  6. vue-导入element-ui

    安装 npm install element-ui -S 项目中导入 修改main.js import ElementUI from 'element-ui'; import 'element-ui/ ...

  7. java跨域配置

    一.问题 使用前后端分离模式开发项目时,往往会遇到这样一个问题 -- 无法跨域获取服务端数据 这是由于浏览器的同源策略导致的,目的是为了安全.在前后端分离开发模式备受青睐的今天,前端和后台项目往往会在 ...

  8. Nginx内置变量及正则语法

    对于很多Nginx初学者来说,配置文件是必须要看懂的.但是当公司的Nginx配置文件放在你面前的时候你总会被一些带着"$"符号和一大推看不懂的的正则给正懵逼.没错带着"$ ...

  9. 通过蓝牙共享网络设置Charles抓包

    在办公室连接WiFi时,电脑和移动设备分配到的IP地址不在同一网段, 但是Android系统提供了一个非常方便的功能,可以搭建一个网络使得这两台设备处于同一网段,实现无障碍访问,使用Charles抓包 ...

  10. Ubuntu: Linux下查看本机显示器分辨率(xrandr)

    版权声明:转载请注明出处 https://blog.csdn.net/JNingWei/article/details/75044598   Linux下查看本机显示器分辨率: $ xrandr Sc ...