二进制题???
我们发现(谁知道咋发现的……)你有a个瓶子 那么你最多能合成num个瓶子 num=a转化成二进制的1的个数
你想要b个瓶子 如果num<=b 你可以自力更生艰苦创业不需要别的瓶子
如果num>b 你需要在a的二进制中消1
你不知道的事:
i&-i是指从后往前数,到第一个1出现为止的数(二进制下)
int work(int x){int num=0;for(;x;x-=x&-x) num++;return num;}这是算二进制中1的个数
ans+=n&-n;n+=n&-n; 比如11100010101010101000 第一次要加1000把1000变成10000 所以瓶+=1000(这个地方理解为十进制 但是反正计算机就是二进制加减)原来的数也+=1000!
#include<iostream>
#include<cstdio>
using namespace std;
int n,k,ans;
int work1(int x){
int num=0;
for(;x;x-=x&-x) num++;
return num;
}
int main() {
ios::sync_with_stdio(false);
cin>>n>>k;
while(work1(n)>k) {
ans+=n&-n;
n+=n&-n;
}
cout<<ans<<endl;
return 0;
}