本文将同步发布于:
题目
题目链接:洛谷 AT4693、AtCoder agc031_c。
题意概述
给定三个数 n , a , b n,a,b n,a,b,求一个 0 ∼ 2 n − 1 0\sim 2^n-1 0∼2n−1 的排列满足下列三个条件:
- p 1 = a p_1=a p1=a;
- p 2 n = b p_{2^n}=b p2n=b;
- popcount ( p i ⊕ p i + 1 ) = 1 \operatorname{popcount}(p_i\oplus p_{i+1})=1 popcount(pi⊕pi+1)=1,其中 ⊕ \oplus ⊕ 表示按位异或。
请你判定是否可以构造并输出方案(若可以)。
题解
启发式的画图
直接考虑这个问题,似乎有些困难?
我们先用简单的语言,将它转化为一个图论问题。
图论转化
如果两个整数 a , b ∈ [ 0 , 2 n ) a,b\in[0,2^n) a,b∈[0,2n),满足 popcount ( a ⊕ b ) = 1 \operatorname{popcount}(a\oplus b)=1 popcount(a⊕b)=1,那么我们就在 a , b a,b a,b 之间连一条边。
那么问题转化为了给定起点与终点,求一条长度为 2 n 2^n