USACO 2.1 海明码 Hamming Codes
来源:互联网 发布:简易电路图绘制软件 编辑:程序博客网 时间:2024/05/22 08:55
海明码
题目描述
给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位的“Hamming距离”(1 <= D <= 7)。“Hamming距离”是指对于两个编码,他们二进制表示法中的不同二进制位的数目。看下面的两个编码 0x554 和 0x234(0x554和0x234分别表示两个十六进制数):
0x554 = 0101 0101 0100
0x234 = 0010 0011 0100
不同位 xxx xx
因为有五个位不同,所以“Hamming距离”是 5。
分析:从0开始枚举,把每个数强制转换为二进制后判断即可。
代码
var
a:array[0..100,1..8] of longint;
ans:array[1..100] of longint;
b:array[1..8] of longint;
i,j,n,p,d,s:longint;
procedure change(x:longint);
var
i:longint;
begin
i:=0;
while x<>0 do
begin
inc(i);
b[i]:=x mod 2;
x:=x div 2;
end;
end;
function check:boolean;
var
i,j,k:longint;
begin
check:=true;
for i:=1 to s do
begin
k:=0;
for j:=1 to 8 do
if a[i,j]<>b[j] then inc(k);
if k<d then exit(false);
end;
end;
begin
readln(n,p,d);
while s<n do
begin
fillchar(b,sizeof(b),0);
change(i);
if check then
begin
inc(s);
for j:=1 to 8 do
a[s,j]:=b[j];
ans[s]:=i;
end;
inc(i);
end;
for i:=1 to n do
begin
write(ans[i],' ');
if i mod 10=0 then writeln;
end;
end.
- USACO 2.1 海明码 Hamming Codes
- 【USACO题库】2.1.5 Hamming Codes海明码(模拟)
- USACO/Hamming Codes海明码 (DFS)
- Hamming Codes 海明码
- HAMMING CODES 海明码
- USACO 2.1 Hamming Codes (hamming)
- USACO--2.1Hamming Codes
- USACO 2.1 Hamming Codes
- USACO 2.1 Hamming Codes
- USACO Hamming Codes 2.1
- 【搜索】洛谷 P1461 海明码 Hamming Codes
- USACO 2.1.5 Hamming Codes
- [USACO 2.1.5] Hamming Codes
- usaco 2.1.5 Hamming Codes
- USACO 2.1.5 Hamming Codes
- USACO Section 2.1 Hamming Codes
- USACO Section 2.1 Hamming Codes
- USACO 2.1 Hamming Codes (递归)
- 微信小程序使用三元运算符代替wx:if
- openstack Neutron源码分析(三)------linuxbridge-agent
- java volatile变量
- 【HDU1693】Eat the Trees(插头DP)
- 面试题19:二叉树的镜像
- USACO 2.1 海明码 Hamming Codes
- [LeetCode]67. Add Binary
- 这儿有自学前端开发的吗-
- java线程实战:多线程下载(上)
- 面试题20:顺时针打印矩阵
- 陈寅恪的最后20年 - 笔记
- Linux 高级IO
- Oracle11g rac常用命令
- 面试题21:包含min函数的栈