Loading

P12116 [NWRRC2024] Longest Common Substring

没有继续调下去的欲望了。

要求最长公共子串为 \(w\) 只有两个限制:

  • 两个串中必须都要出现过 \(w\)
  • 两个串中都出现过的子串长度最大不能超过 \(|w|\)

\(f_{i, j, k, 0/1}\) 表示前 \(i\) 位,最后 \(|w|\) 位状态为 \(j\),出现过的子串中长度为 \(|w| + 1\)\(2^{|w| + 1}\) 种串的出现状态为 \(k\),有没有出现过 \(w\) 的方案数,转移只需要用一点位运算手法就可以了。

考虑最后一步将 \(k\) 那一维求一个和列为两个数组 \(f, g\),答案要求 \(\sum_{i \text{and} j = \emptyset} f_i g_j\),那么很经典是吧,用一个高维前缀和即可。

posted @ 2026-01-31 15:46  Alexande  阅读(2)  评论(0)    收藏  举报