[AGC 011 E]Increasing Numbers

题意

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

分析

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

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

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

猜你喜欢

转载自www.cnblogs.com/wendavid/p/9314559.html