标签:计算 现在 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\)种后缀
标签:计算 现在 sum 假设 一个 $* 独立 长度 为我
原文地址:https://www.cnblogs.com/cjc030205/p/11663537.html