题解:CF437B The Child and Set
一道贪心题。
先说结论,把 以内的数列出来,算出 值,从大到小排序(后文称该数组为 数组),遍历每一个 ,若 ,则 减去 , 即为答案里的一个数,若到最后 ,则无解。
贪心需要证明,证明如下:
对于每一个数,它可以用 的和来表示
这个又怎么证明呢?
显然,每个数都可以用二进制表示,如 可用 表示,也等于 ,化简为 ,证毕。
而 值一定是 的整次幂,是因为它是二进制中某一位的值,所以若干个 值,一定可以组成 。
主要代码:
int lowbit(int x){
return (x & (-x));
}
bool cmp(int x, int y){
return lowbit(x) > lowbit(y);
}
for(int i = 1; i <= m; i ++) a[i] = i;
sort(a + 1, a + m + 1, cmp);
posted on 2024-07-04 13:01 zhangzirui66 阅读(8) 评论(0) 收藏 举报 来源