f(x, y) is defined as the number of different bits in the binary format of x and y. For example, f(2, 3)=1,f(0, 3)=2, f(5, 10)=4. Now given 2 sets of non-negative integers A and B, for each integer b in B, you should find an integer a in A such that f(a, b) is minimized. If there are more than one such integer in set A, choose the smallest one.
Sample Input
2 2 5 1 2 1 2 3 4 5 5 2 1000000 9999 1423 3421 0 13245 353
Sample Output
1 2 1 1 1 9999 0
#include <stdio.h>
#include <stdlib.h>
int a[105],b[105];
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int t,m,n,i,j,x,y,min,sum,k;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
scanf("%d",&a[i]);
qsort(a,m,sizeof(a[0]),cmp);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
for(i=0;i<n;i++)
{
min=10000,k=-1;
for (j=0;j<m;j++)
{
x=b[i];
y=a[j];
sum=0;
while(x!=0||y!=0)
{
if(x%2!=y%2)
sum++;
x/=2;
y/=2;
}
if(min>sum)
{
min=sum;
k=j;
}
}
printf("%d\n",a[k]);
}
}
return 0;
}