hdu 4712 Hamming Distance(随机数法)

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
",mi);

    }

    return 0;
}
View Code
原文地址:https://www.cnblogs.com/gongpixin/p/5451213.html