???

1.[ARC171D] Rolling Hash

题意:

给定 \(P,B,n,m\)\(m\) 个二元组 \((l_i, r_i)\),求是否存在一个非负整数序列 \(x\) 使得 \(hash(l_i,r_i)\) 均不为 \(0\)。定义 \(hash(l,r) = \sum_{i=l}^rx_iB^{r - i}\)

\(n \le 16\)

思路:

首先考虑哈希的常用方法,记 \(s_i\) 表示前缀哈希值,则限制变成 \(s_r \not = B^{r-l+1}s_{l-1}\)

我们对于式子的常用手法是把之关于一个变量的放到一起,于是我们得到:\(s_rB^{-r} \not=s_{l-1}B^{1-l}\)

不难发现,\(x \to s \to s_iB^i\) 是一一映射的,所以这个问题其实就是给一个无向图求是否存在 \(P\) 染色。

这是 NP-Hard 的,所以只能指数来做,设 \(f(S)\) 表示 \(S\) 全部染色的最小颜色数,转移枚举所有是独立集的子集即可。时间复杂度 \(O(n^22^n + 3^n)\)

但是我多加了一位,是 \(O(n3^n)\) 的。

提交记录

posted @ 2024-09-15 22:34  rlc202204  阅读(19)  评论(0编辑  收藏  举报