您的位置:首页 > 其它

hdu 4712 Hamming Distance(随机数法)

2016-05-01 21:24 246 查看
d.汉明距离是使用在数据传输差错控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量,

我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。

给出N个串,求出其中最小的汉明距离(其中某2个串的汉明距离是最小的)。

s.随机数法。。。

c.能不能过,看脸。。。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
using namespace std;

int main(){

//cout<<RAND_MAX<<endl;//32767

int T;
int N;
char str[100005][10];
int num[100005];
int i;
int j;
int mi;
int fuck;
int shit;
int tmp;
int sum;

scanf("%d",&T);

while(T--){
scanf("%d",&N);
for(i=0;i<N;++i){
scanf("%s",str[i]);
}

memset(num,0,sizeof(num));
for(i=0;i<N;++i){
for(j=0;j<5;++j){
if('0'<=str[i][j]&&str[i][j]<='9'){
num[i]=(num[i]<<4)+(str[i][j]-'0');
}
else{
num[i]=(num[i]<<4)+(10+str[i][j]-'A');
}
}
}

mi=21;
srand(time(NULL));
for(i=0;i<400005;++i){
fuck=(rand()*rand())%N;//这是个看脸的代码。。。
shit=(rand()*rand())%N;

if(fuck==shit){
continue;
}
tmp=num[fuck]^num[shit];
sum=0;
while(tmp>0){
sum=sum+(tmp&1);
tmp>>=1;
}
if(sum<mi){
mi=sum;
}
}

printf("%d\n",mi);

}

return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: