您的位置:首页 > 其它

2016春季练习——位运算

2016-03-28 19:48 351 查看
来源: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: