https://www.luogu.org/problemnew/show/P1582
要求用最少的瓶子,那肯定不能有两个一样的瓶子,否则合并更优.
枚举其二进制位,每次加上lowbit,将最后一个1加上.
显然最多logn次.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,k;
int main(){
cin>>n>>k;
bitset<32> b(n);
//cout<<b<<endl;
ll sum=0;
while(b.count()>k){
ll cn=n&-n;
//cout<<bitset<32>(cn)<<endl;
n+=cn;
sum+=cn;
b=bitset<32>(n);
//cout<<b<<endl;
}
//cout<<b<<endl;
cout<<sum<<endl;
}