atcoder#ABC269C. [ABC269C] Submask

[ABC269C] Submask

题目描述

非負整数 N N が与えられるので、以下の条件を満たす非負整数 x x を昇順に全て出力してください。

  • x x 2 2 進数として表記した時に 1 1 となる位の集合が、 N N 2 2 進数として表記した時に 1 1 となる位の集合の部分集合となる。
    • すなわち、全ての非負整数 k k について、「 x x 2k 2^k の位が 1 1 ならば、 N N 2k 2^k の位は 1 1 」が成り立つ。

输入格式

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

N N

输出格式

答えを 1 1 行に 1 1 つずつ、10 10 進法の整数として昇順に出力せよ。

题目大意

给定一个非负整数 nn,按升序打印满足下列条件的所有非负整数 xx

对于每一个非负整数 kk 都成立:

如果二进制下的 xxkk 位上的数字是 11,则二进制下的 nnkk 位上的数字也是 11

11
0
1
2
3
8
9
10
11
0
0
576461302059761664
0
524288
549755813888
549756338176
576460752303423488
576460752303947776
576461302059237376
576461302059761664

提示

制約

  • N N は整数
  • 0  N < 260 0\ \le\ N\ <\ 2^{60}
  • N N 2 2 進数として表記した時、 1 1 となる位は 15 15 個以下である

Sample Explanation 1

N = 11(10) N\ =\ 11_{(10)} 2 2 進数で表記すると、 1011(2) 1011_{(2)} となります。 条件を満たす非負整数 x x は以下の通りです。 - 0000(2)=0(10) 0000_{(2)}=0_{(10)} - 0001(2)=1(10) 0001_{(2)}=1_{(10)} - 0010(2)=2(10) 0010_{(2)}=2_{(10)} - 0011(2)=3(10) 0011_{(2)}=3_{(10)} - 1000(2)=8(10) 1000_{(2)}=8_{(10)} - 1001(2)=9(10) 1001_{(2)}=9_{(10)} - 1010(2)=10(10) 1010_{(2)}=10_{(10)} - 1011(2)=11(10) 1011_{(2)}=11_{(10)}

Sample Explanation 3

入力は 32 32 bit 符号付き整数に収まらない可能性があります。