P16325 【MX-J29-T4】XOR and Swap
题意
给定 \(0\sim 2^n-1\) 的排列 \(p,q\),下标从 \(0\) 开始。
不超过 \(2\cdot 2^n\) 次交换满足 \(p_i\oplus p_j\le i\oplus j\) 的一个 \(p_i,p_j\) 将 \(p\) 变成 \(q\)。
思路
考虑这个操作限制前面存在一个 \(2\) 的系数就很奇怪。考虑这个操作发现是具有可逆性的,那么这告诉我们如果我们能找到一个比较好的序列 \(a\),能够将 \(p\) 交换成 \(a\) 利用 \(2^n\) 次操作就可以做完这道题。
那么因为是 \(2^n\),不妨考虑直接交换到一个正确位置上,那么就是 \(x\) 和 \(p_y=x\),交换有 \(x\oplus p_x\le y\oplus x=y\oplus p_y\),那么用小根堆从小到大维护即可。

浙公网安备 33010602011771号