2016春季练习——位运算

来源:互联网 发布:在线答题的软件 编辑:程序博客网 时间:2024/04/28 02:44

来源:HDU3711

一直位运算就有点问题啊,所以今天做一个题目。

今天是^运算,利用^可以找到两个数有什么不同。这样恰好符合题意,然后我们就可以用一个刷的方法来解决这个问题。

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN=1000;int a[MAXN];int n,m;int shua(int k){    int cnt=0;    while(k){        if(k&1)cnt++;        k>>=1;    }    return cnt;}void diff(int b){    int i,j=0;    int maxn=99999999;    for(i=0;i<n;i++){        int k=shua(a[i]^b);        if(k<maxn) j=i;        maxn=min(maxn,k);    }    cout<<a[j]<<endl;}int main(){int c;cin>>c;while(c--){        cin>>n>>m;        for(int i=0;i<n;i++)            scanf("%d",&a[i]);        sort(a,a+n);        while(m--){            int b;            cin>>b;            diff(b);        }}return 0;}


1 0
原创粉丝点击