标签:lin 初始化 class 节点 its span 受限 题意 字符串
令\(a[i...j]\)为字符串\(a\)单独拉\([i,j]\)组成的数字
给定\(l,r,n\),求一个\(n\)位数,可能有前导\(0\),求\(\sum\limits_{1\le i\le j\le n}a[i...j]\in[l,r]\)。(\(1\le l\le r\le 100^{800},n\le 2000\))
考虑一个暴力:
将\([l,r]\)拉出来建AC自动机,令\(f_{i,u}\)为到达\(u\)点,此时长度已为\(i\),合法字段的最大个数,\(f_{i,u}+dep_{v}\longrightarrow f_{i+1,v}\)
其中\(dep_v\)为\(v\)在fail树上的深度
令这个自动机为原自动机。
考虑减少AC自动机上的节点数,有许多位置是之后不受限制了。比如\(l=12345,r=30000\),当做到\(x=13???\),后面三个问号是可以随意选择的。
然后将这些节点放到AC自动机上(这里强烈建议看代码,说不太清...)
然后令\(g_{u,l}\)表示到达\(u\)点时,后面填任意长度为\(l\)的数字,都在原自动机上合法。初始化可以在建自动机的时候搞出来。
然后再通过累加fail树祖先的,得以完善
\(f_{i,u}+\sum\limits_{j=0}^{n-(i+1)}g_{v,j}\longrightarrow f_{i+1,v}\)
这题本身并不难,但思路偏了几次,浪费的时间就很长
标签:lin 初始化 class 节点 its span 受限 题意 字符串
原文地址:https://www.cnblogs.com/Grice/p/12913761.html