4209: Submask

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:0 解决:0

题目描述

# Submask ### 内存 1024MB ### 时间 2S ## 题目描述 给定一个非负整数 $N$。请按升序输出所有满足以下条件的非负整数 $x$: - $x$ 的二进制表示中包含 $1$ 的位置集合是 $N$ 的二进制表示中包含 1 的位置集合的子集。 换句话说,对于每个非负整数 $k$,如果 $x$ 从低到高第 $k$ 位是 $1$,那么 $N$ 从低到高第 $k$ 位也必须是 $1$。 ## 输入格式 输入整数$N$,按升序输出满足条件的所有整数,每个整数占一行。 ## 输出格式 ## 输入输出样例 ### 输入样例1 ``` 11 ``` ### 输出样例1 ``` 0 1 2 3 8 9 10 11 ``` ### 输入样例2 ``` 0 ``` ### 输出样例2 ``` 0 ``` ### 输入样例3 ``` 576461302059761664 ``` ### 输出样例3 ``` 0 524288 549755813888 549756338176 576460752303423488 576460752303947776 576461302059237376 576461302059761664 ``` ## 数据范围与提示 【样例1说明】 $N = 11_{(10)} = 1011_{(2)}$ 满足条件的整数 $x$ 有: 1. $0000_{(2)}=0_{(10)}$ 1. $0001_{(2)}=1_{(10)}$ 1. $0010_{(2)}=2_{(10)}$ 1. $0011_{(2)}=3_{(10)}$ 1. $1000_{(2)}=8_{(10)}$ 1. $1001_{(2)}=9_{(10)}$ 1. $1010_{(2)}=10_{(10)}$ 1. $1011_{(2)}=11_{(10)}$ 【样例3说明】 注意答案可能不适合$32$位整数类型。 【数据范围】 $N$ 是整数 $0 \le N < 2^{60}$ $N$ 的二进制表示中最多有 $15$ 个位置包含 $1$。 ## 题目来源 ABC269C