#ARC138D. [ARC138D] Differ by K bits

[ARC138D] Differ by K bits

题目描述

整数 N,K N,K が与えられます. (0,1,,2N1) (0,1,\cdots,2^N-1) の順列 P=(P0,P1,,P2N1) P=(P_0,P_1,\cdots,P_{2^N-1}) であって,以下の条件を満たすものが存在するか判定し, また存在するなら一つ構成してください.P P の添字が 0 0 から始まることに注意してください.

  • すべての i i (0  i  2N1 0\ \leq\ i\ \leq\ 2^N-1 ) について,Pi P_i Pi+1 mod 2N P_{i+1\ \mod\ 2^N} 2 2 進表記でちょうど K K 桁だけ異なる. なお,比較の際はどちらも leading 0 0 's を補って N N 桁に揃えた上で比較する.

输入格式

入力は以下の形式で標準入力から与えられる.

N N K K

输出格式

条件を満たす P P が存在しない場合,No と出力せよ. 存在する場合,以下の形式で答えを出力せよ.

Yes P0 P_0 P1 P_1 \cdots P2N1 P_{2^N-1}

条件を満たす解が複数存在する場合,どれを出力しても正解とみなされる.

题目大意

给出两个正整数 N,KN,K,构造排列 P0,P1,...,P2N1P_0,P_1,...,P_{2^N-1} 使得对于所以 i(0i2N1)i(0\le i\le 2^N-1)PiP_iPi+1P_{i+1} 的二进制前 NN 位正好相差 KK 位。另外,比较的两者都要用 00 补齐到至少 NN 位。


输入一行两个正整数 N,KN,K

若有合法的构造,第一行输出 Yes,第二行输出 2N2^N 个数,表示你构造的 P0,P1,...,P2N1P_0,P_1,...,P_{2^N-1},给出任意一组构造即可。

否则输出一行 No

3 1
Yes
0 1 3 2 6 7 5 4
2 2
No

提示

制約

  • 1  K  N  18 1\ \leq\ K\ \leq\ N\ \leq\ 18
  • 入力される値はすべて整数

Sample Explanation 1

P P 2 2 進表記で書くと,P=(000,001,011,010,110,111,101,100) P=(000,001,011,010,110,111,101,100) です. 例えば P1=001,P2=011 P_1=001,P_2=011 なので,これらはちょうど 1 1 桁だけ異なっており,i=1 i=1 について条件が成立していることが確認できます. 同様に,すべての i i についても条件を満たしています.