码迷,mamicode.com
首页 > 其他好文 > 详细

luogu 3281 数数

时间:2019-10-12 21:12:35      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:计算   现在   sum   假设   一个   $*   独立   长度   为我   

设f[n]为串s[1...n]的答案,suf[n]为串s[1...n]的后缀和

假设串n的长度为len[n],现在在串s[1...n]后面增加一个字符p

考虑增加字符p后相较于原来的字符串多了哪些子串,

明显是\(s[1...n]+p,s[2...n]+p,s[3...n]+p,...,p\)

对原来答案增加的贡献是\(newp = suf[n]*B+(len[n]+1)*p\),所以现在的答案是$ newp+lastans$;

定义\(S[n]\)\(0+1+2+3+...+n\)的和

假设现在随便填(先考虑位数不足的情况)

每个位置有\(0~B-1\)\(B\)种填法

同时因为我们注意到了一共会有\(B\)种填法,对原来的\(f[n]\)的答案转移时也应该$*B $

所以对原来增加的贡献为\(\sum newp = B^2*suf[n]+(len[n]+1)*S[B-1]\);

但是这是前面只有一种后缀的情况

假设以\(n\)为结尾的有\(sdif[n]\)种后缀,那么实际贡献为\(\sum newp = B^2*suf[n]+sdif[n]*(len[n]+1)*S[B-1]\)

现在考虑在串\(s[1...n]\)加入一个字符\(p\)后,包含\(p\)的后缀数的计算。

假设当前位随便填写,那么一共有\(B\)种填法,

如果当前位独立算做一个后缀一共有\(B\)

如果联合之前的位,那么一共就有\(sdif[n]*B\)种后缀

所以包含\(p\)的一共有\(sdif[n]*B+B\)种后缀

luogu 3281 数数

标签:计算   现在   sum   假设   一个   $*   独立   长度   为我   

原文地址:https://www.cnblogs.com/cjc030205/p/11663537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!