hdoj3711【水】

题意:
给你两个集合,对于每个B集合的元素,从A集合找一个数使得a^b的二进制的1个数最少。
思路:
直接搞= =

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

struct asd{
    int num;
    int sum;
};
asd q[110];
bool cmp(asd x,asd y)
{
    if(x.sum<y.sum)
        return 1;
    if(x.sum==y.sum)
        return x.num<y.num;
    return 0;
}


int solve(int n)
{
    int ans=0;
    while(n)
    {
        ans+=(n%2);
        n>>=1;
    }
    return ans;
}
int a[110],b[110];

int main()
{
    int n,m;
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&m,&n);
        for(int i=0;i<m;i++)
            scanf("%d",&a[i]);
        for(int i=0;i<n;i++)
            scanf("%d",&b[i]);
        int num=0;
        int k;
        int x;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                q[j].num=a[j];
                q[j].sum=solve(a[j]^b[i]);
            }
            sort(q,q+m,cmp);
            printf("%d\n",q[0].num);
        }
    }
    return 0;
}
posted @ 2016-09-09 20:56  see_you_later  阅读(108)  评论(0编辑  收藏  举报