zoukankan      html  css  js  c++  java
  • HDU 3711 Binary Number

    题目链接:

    http://acm.split.hdu.edu.cn/showproblem.php?pid=3711

    Problem Description
    For 2 non-negative integers x and y, 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.
     
    Input
    The first line of the input is an integer T (0 < T ≤ 100), indicating the number of test cases. The first line of each test case contains 2 positive integers m and n (0 < m, n ≤ 100), indicating the numbers of integers of the 2 sets A and B, respectively. Then follow (m + n) lines, each of which contains a non-negative integers no larger than 1000000. The first m lines are the integers in set A and the other n lines are the integers in set B.
     
    Output
    For each test case you should output n lines, each of which contains the result for each query in a single line.
     
    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

    Hint:

    题意:

    f(a,b)是非负整数a和b二进制时不同的位数
    给两个集合A,B,A和B的大小不超过100
    对于B中每个数b,求A中f(a,b)最小的数。

    题解:

    直接暴力计算。

    代码:

    1.计算两个数二进制之间不同的模版:

    int change(int a,int b)
    {
        int x=a^b;
        int num=0;
        while(x)
        {
            x&=(x-1);
            num++;
        }
        return num;
    

     2.完整代码:

    #include <cmath>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int maxn = 100+10;
    #define inf 0x3f3f3f3f
    #define met(a,b) memset(a,b,sizeof(a))
    int a[maxn],b[maxn];
    int change(int a,int b)
    {
        int x=a^b;
        int num=0;
        while(x)
        {
            x&=(x-1);
            num++;
        }
        return num;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n,m;
            scanf("%d%d",&n,&m);
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]);
            for(int i=0;i<m;i++)
                scanf("%d",&b[i]);
            sort(a,a+n);
            for(int i=0;i<m;i++)
            {
                int num,ans=inf;
                for(int j=0;j<n;j++)
                {
                    int num1=change(b[i],a[j]);
                    if(num1<ans)
                    {
                        ans=num1;
                        num=a[j];
                    }
                }
                printf("%d
    ",num);
            }
        }
    }
    
  • 相关阅读:
    Installing — pylibmc 1.2.3 documentation
    Python-memcached的基本使用
    kindeditor在sae上传文件修改,适合php
    Kindeditor+web.py+SAE Storage 实现文件上传
    使用sae定时执行Python脚本
    Ueditor文本编辑器(新浪SAE平台版本)
    NicEdit
    Lind.DDD.LindMQ的一些想法
    Redis学习笔记~关于空间换时间的查询案例
    微信扫码支付~官方DEMO的坑~参数不能自定义
  • 原文地址:https://www.cnblogs.com/TAT1122/p/5856699.html
Copyright © 2011-2022 走看看