【题解】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)\)。
浙公网安备 33010602011771号