zoukankan      html  css  js  c++  java
  • CF1110H

    题意

    (a[i...j])为字符串(a)单独拉([i,j])组成的数字
    给定(l,r,n),求一个(n)位数,可能有前导(0),求(sumlimits_{1le ile jle n}a[i...j]in[l,r])。((1le lle rle 100^{800},nle 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}+sumlimits_{j=0}^{n-(i+1)}g_{v,j}longrightarrow f_{i+1,v})

    题外话

    这题本身并不难,但思路偏了几次,浪费的时间就很长

  • 相关阅读:
    uva111 History Grading
    UVA 10100Longest Match
    UVA 147Dollars
    归并排序模板
    找礼物(find)
    水流(water)dfs
    细菌(disease) 位运算
    单词接龙
    关于jquery的each遍历,return只终止当前循环,不好使的解决办法
    jquery中ajax回调函数使用this
  • 原文地址:https://www.cnblogs.com/Grice/p/12913761.html
Copyright © 2011-2022 走看看