CF908G New Year and Original Order 题解

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)\)

posted @ 2024-08-09 20:31  FOX_konata  阅读(5)  评论(0编辑  收藏  举报