HAMMING CODES 海明码

http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=2324

题目大意:(如题)

输入输出:(如题)

解题思路:

简单搜索。按递增顺序搜索要求的n个数,然后跟前面的数判断距离是否大于d,找到的一组解即为最小的。

注意:

1.0在每组数据里面都出现。

2.b给出了搜索的最大值:2^b-1。

3.计算两个数a,b的距离,只要计算a^b的二进制形式中1的个数。

核心代码:

int dist(int x,int y) 

{ 

    int cnt,tmp; 

    cnt=0; 

    tmp=x^y; 

    while(tmp>0) 

    { 

        cnt++; 

        tmp-=(tmp&(-tmp)); 

    } 

    return cnt; 

} 
时间: 2024-10-11 08:06:11

HAMMING CODES 海明码的相关文章

洛谷 P1461海明码 Hamming Codes 枚举 搜索

洛谷 P1461海明码 Hamming Codes枚举 搜索 1 #include <bits/stdc++.h> 2 using namespace std ; 3 4 const int N = 11 ; 5 int mx,B,n,D ; 6 int bin[N] ; 7 struct base{ 8 bool f[ N ] ; 9 inline void clear() { 10 for(int i=1;i<N;i++) f[ i ] = 0 ; 11 } 12 inline vo

洛谷 P1461 海明码 Hamming Codes

P1461 海明码 Hamming Codes 题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位的“Hamming距离”(1 <= D <= 7).“Hamming距离”是指对于两个编码,他们二进制表示法中的不同二进制位的数目.看下面的两个编码 0x554 和 0x234(0x554和0x234分别表示两个十六进制数): 0x554 = 010

计算机系统知识(一)—海明码

海明码校验 当计算机存储或移动数据时,可能会产生数据位错误.这时能够利用汉明码来检測并纠错,简单的说,汉明码是一个错误校验码码集. 了解海明码之前先了解一下异或: 异或的数学符号为"⊕".计算机符号为"xor".其运算法则为: a⊕b = (?a ∧ b) ∨ (a ∧?b) 假设二进制下用1表示真,0表示假.则异或的运算法则为: 0⊕0=0, 1⊕0=1, 0⊕1=1. 1⊕1=0(同为0,异为1).  海明码的编码步骤: 1. 依据信息位数,确定校验位数,2r 

奇偶效验码和海明码

奇偶效验码 奇偶校验码是奇校验码和偶校验码的统称.它们都是通过在要校验的编码上加一位校验位组成. 奇校验码:加上校验位后,编码中 1 的个数为奇数个. 偶校验码:加上校验位后,编码中 1 的个数为偶数个. 水平奇偶效验码 例: 原编码 奇校验 偶校验 0000 0000 1 0000 0 0010 0010 0 0010 1 1100 1100 1 1100 0 1010 1010 1 1010 0       垂直奇偶效验码 例: 有32位数据 10100101 00110110 110011

计算及校验海明码的3个举例

海明码具有检错纠错能力,用于传输质量较好的信道,因为出错太多检测不出来. m位数据需要满足具有r位校验码 m+r ≤ 2r-1 校验位放在2n位置上,如??1? 111? 1111 111? 111... 校验码依次在20. 21. 22. 23. 24位置上,有的是从后往前写的,结果不影响,知道怎么算就行. 例1,计算1011的海明码及检验 一.算校验位 原数据1011, 有4位数据位, 需满足4+r≤2r-1这个公式, 求得r=3,表明有3个检验位,以下用a.b.c....来代替 得到ab1

纠错编码-海明码

一.海明码 海明码只能发现双比特错误,纠正单比特错误 二.工作原理 "动一发而牵全身",因为海明码是一个多重校验码,也就是码字中的信息码位同时被多个校验码进行校验 三.工作流程 1.确定校验码位数 海明不等式2^r>=k+r+1,r为冗余信息位,k为信息位 eg:要发送的数据为D=101101 则数据的位数k=6 满足的不等式最小r为4 也就是D=101101的海明码应该有6+4=10位,其中原始数据6位,校验码4位 2.确定校验码和数据的位置 还是上面的那个例子D=101101

【USACO 2.1】Hamming Codes

/* TASK: hamming LANG: C++ URL:http://train.usaco.org/usacoprob2?a=5FomsUyB0cP&S=hamming SOLVE: 找粗一个值最小的n个元素的集合,每个元素都是不超过m位二进制的数,且两两之间二进制位不同的位不小于d. dfs,枚举每一个数,枚举范围:(前一个数,1<<m),每次进入dfs都判断一下当前集合是否满足两两距离不小于d. */ #include<cstdio> int n,m,d; in

Hamming Codes

链接 分析:码农模拟题,首先我们先求出对于0来说满足条件的数,然后在从集合当中筛选出任意两个都满足条件的数即可 1 /* 2 PROB:hamming 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream" 7 #include "cstdio" 8 #include "cstring" 9 #include "string" 10 #include "vector&qu

USACO Hamming Codes DFS 构造

我还是用了很朴素的暴力匹配A了这题,不得不感叹USACO时间放的好宽... /* ID: wushuai2 PROG: hamming LANG: C++ */ //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h> #include <iostream> #include <fstream> #include <cstring>