???
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)\) 的。