zoukankan      html  css  js  c++  java
  • hdoj 4712 Hamming Distance(靠人品过的)

    我先解释一下汉明距离  以下来自百度百科

    在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的字符不同的个数。换句话说,它就是将 一个字符串变换成另外一个字符串所需要替换的字符个数。 例如:
    * 1 与 0 之间的汉明距离是 1。
    * 214 与 214 之间的汉明距离是 0。
    * "abcd" 与 "aacd" 之间的汉明距离是 1。
    汉明重量是字符串相对于同样长度的零字符串的汉明距离,也就是说,它是字符串中非零的元素个数:对于二进制字符串来说,就是 1 的个数,所以 11101 的汉明重量是 4。
    汉明距离在信息论、密码学等方向有很重要的应用。

    这个题是让你求n个数两两之间最小的汉明距离,而且规定了每个数是长度为5的16进制数,可以想到求出最大的值为20,最小为10。 没想到什么好的算法,看了人家的解题报告,依靠RP,随机找1000000对点求最小值,不过还是过了。

    #include<algorithm>
    #include<stdio.h>
    #include <stdlib.h>
    #define inf 1000000007
    
    using namespace std;
    
    int M[100005];
    int count(int x,int y)
    {
    	int sum=0,p=x^y;
    	while (p)
    		sum+=p%2,p>>=1;
    	return sum;
    }
    
    int main()
    {
    	int T,y,n,d,i,j,x;
    	scanf("%d",&T);
    	while (T--)
    	{
    		scanf("%d",&n);
    		for (i=1;i<=n;i++)
    		{
    			scanf("%X", &M[i]);
    		}
    		int ans=inf;
    		for (i=1;i<=1000000;i++)
    		{
    			x=rand()%n+1;
    			y=rand()%n+1;
    			if (x==y) continue;
    			ans=min(ans,count(M[x],M[y]));
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    


  • 相关阅读:
    RabbitMQ知识点整理12-消费端的确认与拒绝
    RabbitMQ知识点整理11-消费消息
    RabbitMQ知识点整理0-准备工作和记录
    设计模式-23种设计模式
    设计原则-6大设计原则
    super在python 2.7和Python3中的使用
    rest-framework 视图类源码分析
    celery 组件在django环境应用
    rest framwork 4 分页功能
    rest framework 学习 序列化
  • 原文地址:https://www.cnblogs.com/xindoo/p/3595033.html
Copyright © 2011-2022 走看看