csp-s模拟47

T1:
考虑每个黑条的限制范围其实是一个区间,于是把脚长的限制计算在里面后去掉
而每次只能走k,所以可以在模k意义下进行线段覆盖
若全覆盖则无解,否则有解。
(注意若某一个黑条第限制区间大于k,则一定无解)
(还要注意若一个黑条跨越了模k的序列,则需要拆成两个)

T2:
暴力线段树合并就完了

T3:
kmp处理出原串的t集合
考虑实际上问题就是:构造一个字典序最小的01串使其与原串的nxt数组某些位置相同
考虑当满足第i个限制后如何满足第i+1个限制
\(delta=len_{i+1}-len_i\)
\(delta<len_i\),则为满足nxt的限制,直接复制delta长度的后缀接在后面即可
\(delta>=len_i\),则复制该串放在最后,中间补0即可。
但这时可能会不满足条件,所以当新串的kmp跑到\(len_{i+1}\)时需要判断一下,若不满足限制,则将中间补的0的最后一位i改为1即可。

posted @ 2019-11-04 08:35  G_keng  阅读(117)  评论(0编辑  收藏  举报