[AGC 011 E]Increasing Numbers
Posted wendavid
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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)了。
这个题目算是一个挺脑洞的题目,最主要是需要注意到“上升数”能够拆成这样一个非常对称的优美形式。
以上是关于[AGC 011 E]Increasing Numbers的主要内容,如果未能解决你的问题,请参考以下文章
[AGC011E] Increasing Numbers [数学]
AtCoderAGC011 E - Increasing Numbers
334. Increasing Triplet Subsequence