洛谷P1582 倒水 二進制運算

題目連接
https://www.luogu.org/problem/show?pid=1582
因爲無論怎麼倒水瓶中水只會是1,2,4,8,16…的狀態,想到用二進制表示狀態。
1表示瓶中有水,0表示沒有,只要讓N中的1變成K個就可以了;
在計數N中的一時用到(n&-n),然後每次要去掉最後的1,這時n+(n&-n);

#include<iostream>
#include<cstdio>
int n,k,ans;
using namespace std;
int Count(int x){
    int s=0;
    while(x){
        x=x-(x&-x);
        s++;
    }
    return s;
}
int main(){
    cin>>n>>k;
    while(Count(n)>k){
        n=n+(n&-n); 
        ans=ans+(n&-n);
    }
    cout<<ans;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章