游记没什么好搬的,链接。
T1 发现只会有一个超限,贪心换一下就行了。
T2 首先暴力枚举 \(k\) 拿边跑 MST 的复杂度是 \(O(2^knk + 2^kn\log nk)\) 的,考虑将 Kruskal 的 sort 换成 std::merge 即可通过,复杂度 \(O(2^knk)\)。
T3 首先能发现可以将 \(\text{LCP}\) 和 \(\text{LCS}\) 扔掉,将剩余不同部分称为一对串的特征,这里已经有简单的 ACAM 做法了,令 \(S \gets A?BC?D\),\(A,D\) 分别为 \(\text{LCP}\),\(\text{LCS}\),\(B,C\) 分别为两个特征,跑多模匹配就行了。
另一个做法是按照特征分类,显然可能的答案需要左右都被文本串包含,考虑对左右分别建出 trie 树,跑出 dfn 后等价于在两个区间内,二位数点即可,两个做法复杂度分别为 \(O(\sum L + n)\) 和 \(O(\sum L + n\log L)\),事实证明 ACAM 的常数还是挺大的,暴力跑的复杂度是可以分析到 \(O(q\sqrt L)\) 的。
为什么要对着不可能的哈希想呢,为什么呢。
T4 其实状态已经对了,设 \(f_{i,j,k}\) 表示当前决策了 \(i\) 个,失败了 \(j\),当前钦定了 \(k\) 个人已经确定,然后系数延后计算即可,场上连延后算贡献往时间填系数都想到了,为什么还是 20 呢。
具体地,对于 \(S_{i+1} = 1\) 的情况,如果当前成功了 \(f_{i+1,j,k} \gets f_{i,j,k}\),反正当前不可能成功,则需要在前面选一个填过来,再补几个系数:
\(S_{i+1} = 0\) 同理,注意填可能成功的人但失败时,要算上新位置钦定填 \(j+1\) 的人的方案,注意到 \(\sum c_i = n\),所以暴力转移复杂度是 \(O(n^3)\) 的,可以通过,为什么差个系数呢。