水题!可惜没看清当A中有多个相同结果时,要取最小值,被WA了一次。
#include <iostream>
using namespace std;
int AC(int a,int b)
{
int n=0;
while(a!=0||b!=0)
{
if(a%2!=b%2)
n++;
a/=2;
b/=2;
}
return n;
}
int main()
{
int x,y,i,j,A[101],B[101],n,e,f,top;
cin>>n;
while(n--)
{
cin>>x>>y;
for(i=0;i<x;i++)
cin>>A[i];
for(i=0;i<y;i++)
cin>>B[i];
for(i=0;i<y;i++)
{e=1000000;
for(j=0;j<x;j++)
{
f=AC(A[j],B[i]);
if(e>f)
{
top=A[j];
e=f;
}
else if(e==f&&top>A[j])
{
top=A[j];
}
}
cout << top<< endl;
}
}
}