CF908C
定义 \(S(n)\) 为将 \(n\) 所有数位从小到大排序后得到的数,求 \(\sum_{i=1}^{n} S(i)\)
\(1 \leq n \leq 10^{700}\)
-
看到这个题大部分人都会奔着数位 \(dp\) 的地方想
-
但这个题的难度在于插入一个数后不好算贡献
-
其实也挺好算的 -
\(dp\) 维护当前若干数字排完序的贡献,转移有三种情况
-
选择更小的数字:在高位插入,没有贡献。
-
选择更大的数字:在低位插入,贡献为 \(\times 10\)
-
选择当前数字:在中间位插入,贡献不确定,继续递推
-
-
最终复杂度 \(O(\log_{10}^2 n)\)