Binary Number (bit operation)

#include <bits / STDC ++ H.> 
the using namespace STD; 
int n-; 
int getBits1 (n-int) // binary number is obtained in the form of a number 1. 
{ 
	int RES = 0; 
	the while (n-) 
	{ 
		IF ( n-& 1) RES ++; 
		n->> = 1; 
	} 
	return RES; 
} 

int getBits2 (int n-) 
{ 
	int RES = 0; 
	the while (n-) 
	{ 
		RES ++; 
		n-= n-& (n--1); // time erasing a 1 Oh 
	} 
	return RES; 
} 

int main () 
{ 
	the while (n->> CIN) 
	{ 
		COUT << getBits1 (n-) << "" << getBits2 (n-) << endl; 
	} 
	return 0; 
}    
//. 1. 1 = 1 
// 2 = 101 
@ 3 = 112 
// 4 = 1001

topic:

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.

样例输入:

2
2 5
1
2
1
2
3
4
5
5 2
1000000
9999
1423
3421
0
13245
353
样例输出:
1
2
1
1
1
9999
0
#include<bits/stdc++.h>
using namespace std;
int f(int n)
{
	int res=0;
	while(n)
	{
		res++;
		n=n&(n-1);
	}
	return res;
}

int main()
{
	int a[105];
	int T,n,m,i,j,k,minn,b,t;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&n,&m);
		for(i=0;i<n;i++) scanf("%d",&a[i]);
		for(i=0;i<m;i++)
		{
			scanf("%d",&b);
			minn=f(a[0]^b);
			k=0;
			for(j=1;j<n;j++)
			{
				t=f(a[j]^b);
				if(minn>t || minn==t&&a[k]>a[j])
				{
					minn=t;
					k=j;
				}
			}
			printf("%d\n",a[k]);
		}
	}
	return 0;
}

  

 

 

Guess you like

Origin www.cnblogs.com/dragondragon/p/11345050.html