[AGC 011 E]Increasing Numbers

题意

给出一个数N,要求分成最少数量的“上升数”,就是各个数位从高位到低位单调不降的数的和,求最少能分成多少数。
(1leq Nleq10^{500000})

分析

考虑一个所谓的“上升数”,一定可以表示为不超过9个形如(1,11,111,cdots)的数之和(数位最多上升9次),那么假设这个(N)可以分成不超过(k)个“上升数”之和,那么这其实也相当于分成不超过(9k)个这样由1组成的数之和。也就是(N=sumlimits_{i=1}^{9k}(10^{r_i}-1)/9)的形式。

简单化一下式子就可以得到这个式子等价于(9N+9k=sumlimits_{i=1}^{9k}10^{r_i}),我们发现(k)的范围只能是(1cdots L)(L)表示(N)的长度,那么直接枚举(k),每次往左边的数((9N+9k),每次(k)增加1)里面加9,判定一下右边是否能满足就可以得到最小的(k)了。

这个题目算是一个挺脑洞的题目,最主要是需要注意到“上升数”能够拆成这样一个非常对称的优美形式。

原文地址:https://www.cnblogs.com/wendavid/p/9314559.html