【题解】P3281 [SCOI2013] 数数

假设 \(\mathrm{LCP}(x,R)=i-1\),那么第 \(i\) 位可以取 \([0,R_i)\),前面必须是 LCP,后面可以随意。
那么贡献可以分为:

  • Part A: \(1\) 到 \(i\) 位。
  • Part B: \(i+1\) 到 \(n\) 位。
  • Part AB: 上面两个部分取前后缀合并得到的贡献。
    • 对于 A 部分的一个后缀 \(s\),有 \(\sum_{k=0}^{n-i} sB^{k+(n-i)}+(\sum_{j=0}^{k-1}\frac{B(B-1)}{2}\times B^{n-i-1+j})\)。化简得到 \(B^{n-i}\sum_{k=0}^{n-i} sB^{k}+\frac{B^{k}-1}{2}\)。
    • 那么 \(s\) 有 \(i\times R_i\) 种取值,维护他们的和即可。
    • 这里 \(k\) 的求和从 0 开始,这样 A 部分就无需统计以 \(i\) 结尾的贡献。
  • 删去前导零的贡献:设前 \(i\) 位都是 0,计算从 \(i\) 开始的子串,则应该删除 \(\sum_{k=1}^{n-i}B^{n-i-1}\times \frac{B(B-1)}{2}(\sum_{j=0}^{k-1} B^j)=B^{n-i}\times \frac{1}{2}(\sum_{k=1}^{n-i}B^k-1)\)。
posted @ 2026-04-20 20:21  TallBanana  阅读(18)  评论(0)    收藏  举报