《ACM程序设计》例题解析-HDU3711

HDU 3711Binary Number

题目大意

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

思路

¡ 直接暴力
¡ 对于 B 中的每个值,暴力枚举 A 中所有的值,记录下 f( a,b ) 最小的那个。

代码

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
 
#define PB push_back
#define MP make_pair
#define FU(i,n) for(i=0;i=0;i--)

typedef vector VI;
typedef vector VS;
typedef vector VD;
typedef pair PII;
typedef long long LL;
typedef unsigned long long ULL;

int cnt1(int x){
    int c = 0;
    for(;x;x>>=1) if(x&1) c++;
    return c;
}

int main(){
    int a[100],b,i,j,n,m,k,min,t,ca;
    cin >> ca;
    while(ca--){
        cin >> n >> m;
        FU(i,n) cin>>a[i];
        FU(i,m){
            cin>>b;
            min = cnt1(b^a[0]);
            k = 0;
            for(j=1;j




你可能感兴趣的:(ACM)