考虑要找n个数,使得这n个数的或和为k,那么我们可以枚举k的二进制表示中的每一位,如果这一位是1,那么我们就可以选这一位,否则不选。
这样我们可以找到2^x个数,其中x是k的二进制表示中1的个数。
一种情况导致答案不存在:
1.如果n > 2^x,那么答案一定不存在
小红认为一个序列a1,a2,…,an是完美序列需要满足以下条件
对于仼意的2≤i≤n, 都满足0<ai−1<ai≤260;
a1 or a2 or...or an=k
现在他给你n和k,请你帮助他构造一个合法的序列a。
在本题中,or代表位运算中的按位或运算。
在一行上输入两个整数n,k(1≤n≤105;0≤k≤260)。
如果存在这样的合法序列,在第一行输出一个YES;随后,第二行输出n个整数代表序列。
否则,直接输出NO。
如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。
注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
输入
3 7
输出
YES
2 3 7
说明
在这一个测试数据中,1,2,4、1,2,7等也是合法的构造方案。
输入
2 1
输出
NO