CF908G 题解

题意

传送门

\(x\le10^{700}\),问 \(1\)\(x\) 中每个数在各数位排序后得到的数的和。答案模 \(10^9+7\)

题解

学到一种新鲜的转化方式,来记一下。

\(x\) 的位数记为 \(n\)。一个显然的想法是算贡献,即枚举 \(d\in[0,9],i\in[1,n]\),算 \(d\)\(i\) 位上出现的次数。但尝试了一会,发现难以处理。

此时我们将数字 \(i\in[0,9]\) 拆为 \(\underbrace{\overline{11\dots1}}_i\) 的形式,并竖着写下来。那么任意一个数可以表示为不超过 \(9\)\(11\dots1\) 的和的形式。例如 \(3459\) 就是:

\[\begin{aligned} 1111\\ +1111\\ +1111\\ +111\\ +11\\ +1\\ +1\\ +1\\ +1\\ \end{aligned} \]

然后再算贡献。枚举 \(d\in[1,9],i\in[1,n]\),那么答案加上:大于等于 \(d\) 的数字出现了恰好 \(i\) 次的数的个数 \(\times \underbrace{11\dots1}_i\)。前面部分是个简单的数位 \(\text{DP}\)。于是此题得解。

posted @ 2023-01-27 14:44  realFish  阅读(36)  评论(0)    收藏  举报