[Codeforces 1017.D] The Wu(位运算,meet in the middle)
题目
解题思路
观察数据范围,发现 $n\leqslant 12$,即最多有 $2^{12}=4096$ 种字符串,所以输入的 $s$ 和 $t$ 肯定有很多重复的。
那么可以先预处理出 $4096\times 4096$ 的所有情况的”Wu value”,又由于 $k \leqslant 100$,再预处理出所有的答案,询问时 $O(1)$ 回答即可。
算一下复杂度:$O(n\cdot 2^n\cdot 2^n + 2^n\cdot k) \approx O(2e8)$,这道题时间限制2s,好像可以卡过——事实上是,codeforces评测机太快了,用时最多的点仅有592ms。$qwq$
可是追求卓越的我们并不甘心就此止步,于是 meet in the middle 再度粉墨登场。
观察上面的复杂度,发现 $4096\times 4096=16777216$,只不过再乘以一个 $n$ 就变成 $2e8$了,所以可以想办法不乘 $n$。预处理出一半长度的字符串,最多 $2^6=64$ 种,然后再用这 $64$ 种情况预处理 $4096\times 4096$ 所有情况即可。
复杂度 $O(\frac{n}{2}\cdot 2^{\frac{n}{2}}\cdot 2^{\frac{n}{2}} + 2^n \cdot 2^n + k\cdot 2^n) \approx O(2e7)$(好吧,再加点常数) codeforces 上最多389ms
Code
Code#1 O(2e7)
1 |
|
Code#2 O(2e8)
1 |
|