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\n",ans);
  }
  return 0;
}
目录
相关文章
|
BI
2020ICPC济南站 A . Matrix Equation (高斯消元)
2020ICPC济南站 A . Matrix Equation (高斯消元)
106 0
2020ICPC济南站 A . Matrix Equation (高斯消元)
LeetCode 70. 爬楼梯 Climbing Stairs
LeetCode 70. 爬楼梯 Climbing Stairs
|
C语言
HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)
HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)
101 0
HDOJ(HDU) 2401 Baskets of Gold Coins(数列、)
HDOJ(HDU) 2401 Baskets of Gold Coins(数列、)
83 0
|
人工智能
HDOJ 1028 Ignatius and the Princess III(递推)
HDOJ 1028 Ignatius and the Princess III(递推)
122 0
|
机器学习/深度学习
HDOJ(HDU) 2083 简易版之最短距离(中位数)
HDOJ(HDU) 2083 简易版之最短距离(中位数)
143 0
|
Java
HDOJ1518Square 深搜
HDOJ1518Square 深搜
107 0
HDOJ/HDU 1372 Knight Moves(经典BFS)
HDOJ/HDU 1372 Knight Moves(经典BFS)
137 0
HDOJ 2080 夹角有多大II
HDOJ 2080 夹角有多大II
97 0
|
测试技术
HDOJ(HDU) 1859 最小长方形(水题、、)
HDOJ(HDU) 1859 最小长方形(水题、、)
81 0