码迷,mamicode.com
首页 > 其他好文 > 详细

二进制应用

时间:2018-08-31 23:24:38      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:ram   key   ber   cti   ==   line   class   ace   lin   

1.单取某一位的1

i&-i   返回的值就是从后往前数,到第一个1出现为止的数(二进制下)。

int work(int x){int num=0;for(;x;x-=x&-x) num++;return num;}

e.g.:luogu 1582倒水

#include<bits/stdc++.h>
using namespace std;
int n,k,ans;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)){if(ch==-)f=-1;ch=getchar();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*f;}
inline int sudo(int i){int ans=0;for(;i;i-=i&(-i)) ans++;return ans;}
int main(){
    n=read();k=read();
    while(sudo(n)>k) ans+=n&(-n),n+=n&(-n);
    printf("%d\n",ans);return 0;}

 

二进制应用

标签:ram   key   ber   cti   ==   line   class   ace   lin   

原文地址:https://www.cnblogs.com/asdic/p/9568616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!