来源: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;
}