题意
现有n个杯子各1升水,可将两个水量相等的杯子合并,最后保留不超过k个杯子,问需要额外添加多少杯子
即,找到最小的x使二进制表示的n+x只有不多于k位为1。
思路
将n用二进制表示后,保留最大的k-1个1,将剩余部分合并成一个杯子
如n=11,k=2,n用二进制表示为1011,则保留第一位的1,然后将剩余的011合并成一个杯子,需要添加1个杯子。
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=2e5+