ARC053D 题解
blog。Alan_Zhao /bx
先考虑判定一个序列 \(c_1,c_2,\cdots,c_{2n-2}\) 是否可能成为最终序列。
记 \(p=a^{-1},q=b^{-1}\),有两种途径获取 \(c_k\):
- 从 \(a\) 获取:此时 \(a\) 删除了 \(1\sim p_{c_k}-1\) 的前缀,并且 \(b\) 的长度至少为 \(1\)(选 \(b\) 删 \(a\))。
- 从 \(b\) 获取:此时 \(b\) 删除了 \(1\sim q_{c_k}-1\) 的前缀,并且 \(a\) 的长度至少为 \(1\)(选 \(a\) 删 \(b\))。
考虑直接 DP。注意到判定只与 \(c_k\) 这个值有关,于是只需要记录 \(c_k\) 的值以及下一次是否可使用操作 \(1,2\)。具体来说,记 \(f_{i,j,0/1,0/1}\) 表示前 \(i\) 个数,上一次选出的数为 \(j\),是否能够操作 \(1\),是否能够操作 \(2\),序列数量。
每次只有 \(O(1)\) 个可能选择的数,并且它们的位置都是已知的(例如使用操作 \(1\) 时,两位置分别是 \(p_{c_k},i-(p_{c_k}-1)\)),所以容易维护出下一次能否使用操作 \(1,2\)。于是 \(O(1)\) 转移。
复杂度 \(O(N^2)\),相当好写好懂。code