bitset大法好啊
显然的二进制题,每个瓶子里的水只可能是$2^i$
所以要剩下$k$个瓶子,就相当于最后总的水量的二进制中的$1$的个数$≤k$
从最后一位开始添$1$看什么时候这个数的$1$的个数$≤k$就行了
code
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 namespace gengyf{ 5 inline int read(){ 6 int x=0,f=1;char s=getchar(); 7 while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();} 8 while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();} 9 return f*x; 10 } 11 ll n,k,ans; 12 ll lowbit(ll x){return x&-x;} 13 int main(){ 14 n=read();k=read(); 15 bitset<60>a(n); 16 while(a.count()>k){ 17 ans+=lowbit(n); 18 n+=lowbit(n); 19 a=n; 20 } 21 printf("%lld",ans); 22 return 0; 23 } 24 /* 25 affection 挚爱 26 adopt 采纳 27 administration 管理 28 agent 代理 29 */ 30 } 31 signed main(){ 32 gengyf::main(); 33 return 0; 34 }