、

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\),那么用小根堆从小到大维护即可。

posted @ 2026-09-27 17:24  tanghg  阅读(6)  评论(0)    收藏  举报