码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 4712 Hamming Distance(随机数法)

时间:2016-05-01 21:57:23      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

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

 

hdu 4712 Hamming Distance(随机数法)

标签:

原文地址:http://www.cnblogs.com/bofengyu/p/5451213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!