• Binary Number(位运算)


    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int getBits1(int n)//求取一个数的二进制形式中1的个数. 
    {
    	int res=0;
    	while(n)
    	{
    		if(n&1) res++;
    		n>>=1;
    	}
    	return res;
    }
    
    int getBits2(int n)
    {
    	int res=0;
    	while(n)
    	{
    		res++;
    		n=n&(n-1);//一次消去1个1哦 
    	}
    	return res;
    }
    
    int main()
    {
    	while(cin>>n)
    	{
    		cout<<getBits1(n)<<" "<<getBits2(n)<<endl;
    	}
    	return 0;
    }   
    // 1= 1    1
    // 2= 10   1
    // 3= 11    2
    // 4=100    1
    

    题目:

    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.

    输入:

    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.

    输出:

    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
    ",a[k]);
    		}
    	}
    	return 0;
    }
    

      

     
  • 相关阅读:
    数据库锁机制
    spring的事务传播行为与隔离级别
    Logback+ELK+SpringMVC搭建日志收集服务器
    提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
    有状态的bean和无状态的bean的区别
    浅谈Spring解决循环依赖的三种方式
    某类继承thread,同时实现runnable
    java动态代理
    缓存一致性
    Elasticsearch系列(一)--入门
  • 原文地址:https://www.cnblogs.com/dragondragon/p/11345050.html
Copyright © 2020-2023  润新知