因为恰好有 k 个字串满足某种条件再自动机的转移上是比较好记录的,这里是单串,于是考虑再kmp自动机上做dp,于是记出了 dp_{i,j,x} 的状态表示跑了 i 个字符,在自动机的 x,有 x 个子串小于 k 是否可以到,但是马上发现不对,字典序比 s 小的分两类,s 的前缀或者 s 的前缀,然后再一个 s 为 1 的位上填0,后面乱填不管。对于第一类,我们可能转移到一半让它变成 s 了,并不会像第二类一样添加字符仍然还是第二类,所以第一类到第二类、第二类到第二类的转移都可以跑,但是第一类绝对不能直接和第二类公用一维,状态必须记 dp_{i,j,x,y} 表示跑了 i 个字符,在自动机的 x,有 x 个第一类子串小于 k,y 个第二类子串是否可以到。然后状态大小 n^2m^2 打算就先当个暴力写,写完才发现还要包含 s,于是再加一位 01,也是好记的,然后测样例,才发现要输出方案,然后一想无论是不滚动记从哪里来还是直接记答案都是 n^2m^2 的空间估计才 15 分还要看我实现的常数,然后放弃,回去看T1。
然后开始死磕T1,首先考虑到按值域从小到大跑,然后发现找到 0 后可以维护一共区间 [l,r],每次看一个没用的数 v 在左边还是右边,然后直接暴力拓展过去,拓展到了之后设新的 mex 是 x,然后把 v 填在端点上,然后 v+1\sim x 还没有用的数在 [l,r] 乱填都可以,但是在性质 n 会被卡到 2n+\log_2 n,然后就开始了各种优化,最终结果是卡到 1.5n。没然后了,后两题什么玩意。
T1 4.5h
T2 5min
T3 5min
总结
Day1的T1dp都写出来了但是我都没想到背包我是唐逼,dp都写出来了但是我都没发现可以直接多项式卷起来我是唐逼,dp都写出来了但是我都没法很快的分析出复杂度我是唐逼。Day1的T2dp都写出来了但是我都没想到没必要记 i 直接放在状态里面存最小值就行我是唐逼。Day2的T1直接掉进 1.5n 做法不出来我是唐逼。