#ABC269C. [ABC269C] 子集掩码(Submask)

    ID: 2739 Type: Default 1000ms 256MiB Tried: 0 Accepted: 0 Difficulty: (None) Uploaded By: Tags>ABC入门算法闯关STL与数据结构

[ABC269C] 子集掩码(Submask)

题目描述

给定一个非负整数 NN。请按升序输出所有满足以下条件的非负整数 xx

  • x x 的二进制表示中包含 11 的位置集合是 NN 的二进制表示中包含 11 的位置集合的子集。

换句话说,对于每个非负整数 kk,如果 xx 从低到高第 kk 位是 11,那么 NN 从低到高第 kk 位也必须是 11

输入格式

一行一个整数 NN

输出格式

将答案以十进制整数的形式按升序排列,每行输出一个。

输入输出样例 #1

输入 #1

11

输出 #1

0
1
2
3
8
9
10
11

输入输出样例 #2

输入 #2

0

输出 #2

0

输入输出样例 #3

输入 #3

576461302059761664

输出 #3

0
524288
549755813888
549756338176
576460752303423488
576460752303947776
576461302059237376
576461302059761664

说明/提示

样例说明1

N = 11(10) N\ =\ 11_{(10)} = 1011(2) 1011_{(2)}

满足条件的整数 xx 有:

  • 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)}

样例说明 3

注意答案可能不适合 3232 位整数类型。

数据范围

  • N N は整数
  • 0  N < 260 0\ \le\ N\ <\ 2^{60}
  • N N 的二进制表示中最多有15个位置包含1。