hamming解题报告
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
  找出N个二进制数,每个数有B位,使得各数两两之间“海明距离”至少为D。(若有多组解,输出字典序最小的。)
  海明距离是指:两个二进制数不同二进制位的个数。
【数据范围】
  1<=N<=64
  1<=B<=8
  1<=D<=7
【输入格式】
  一行三个数N、B、D,空格分割。
【输出格式】
  从小到大输出,每行输出十个数。
【输入样例】
  16 7 3
【输出样例】
  0 7 25 30 42 45 51 52 75 76
  82 85 97 102 120 127
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
  又是一道枚举,贪心即可。
  最多256个数,从0开始扫(从小到大),能取的就取了,并且把所有与之距离小于D的数“删掉”。这样一来,取的就只可能是最优解了。由于本题不可能无解(题目都没说无解咋办,当然有解。。),而且删数的时间也就是256,因此总时间比62500稍大,常熟大约是8,完全可以接受。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
  第二次AC。
  第一次提交没过,忘了USACO要求的输出末尾换行。。

------------------------------------------------------------------------------------------------------------------------------------------------

【代码】

 /*
ID: icedrea1
PROB: hamming
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; void DtoB(int num)
{
int bit[],l=;
while(num) { bit[l++]=num&; num>>=; }
for(int i=l;i<;++i) cout<<;
for(int i=l-;i>=;--i) cout<<bit[i];
}
void look()
{
ifstream in("hamming.out"); int num;
while(in>>num)
{
DtoB(num);
cout<<endl;
} in.close();
} // just a look -----------------------------------------------------------
// go~! int N,B,D;
bool have[]; int num[],sum; int dis(int x,int y)
{
int s=;
while(x||y) { s+=(x^y)&; x>>=; y>>=; }
return s;
} void del(int x)
{
for(int y=;y<(<<B);++y)
if(dis(x,y)<D) have[y]=false;
} void print(ostream &out)
{
for(int i=;i<sum-;++i) out<<num[i]<<(i%==?"\n":" ");
out<<num[sum-]<<endl;
} int main()
{
//look(); return 0;
ifstream in("hamming.in");
ofstream out("hamming.out"); in>>N>>B>>D;
for(int x=;x<(<<B);++x) have[x]=true;
for(int x=;x<(<<B) && sum<N;++x)
{
if(!have[x]) continue;
num[sum++]=x; del(x);
} if(sum<N) out<<"not enough!"<<endl; else print(out); in.close();
out.close();
return ;
}

USACO Section2.1 Hamming Codes 解题报告 【icedream61】的更多相关文章

  1. USACO Section2.1 The Castle 解题报告

    castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  2. USACO Section2.1 Ordered Fractions 解题报告

    frac1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  3. USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】

    holstein解题报告 --------------------------------------------------------------------------------------- ...

  4. USACO Section2.2 Preface Numbering 解题报告 【icedream61】

    preface解题报告----------------------------------------------------------------------------------------- ...

  5. USACO Section2.3 Controlling Companies 解题报告 【icedream61】

    concom解题报告------------------------------------------------------------------------------------------ ...

  6. USACO Section2.3 Money Systems 解题报告 【icedream61】

    money解题报告------------------------------------------------------------------------------------------- ...

  7. USACO Section2.3 Zero Sum 解题报告 【icedream61】

    zerosum解题报告----------------------------------------------------------------------------------------- ...

  8. USACO Section2.3 Cow Pedigrees 解题报告 【icedream61】

    nocows解题报告------------------------------------------------------------------------------------------ ...

  9. USACO Section2.3 Longest Prefix 解题报告 【icedream61】

    prefix解题报告------------------------------------------------------------------------------------------ ...

随机推荐

  1. robotframework实战三--自定义关键字

    在rf的实战1中,我的登录获取验证码就使用了自定义关键字,具体怎么做的,如下 1.新建文件夹 新建一个文件夹,我的MyLibrary,并且存放在site-packages下 2.编写代码 在pytho ...

  2. python_4_interaction

    #1(方法1)尽量不用这种拼接法,效率低下,占用内存多 name=input("name:") age=input('age:') job=input('job:') salary ...

  3. list 用法的随手记

    在list 用法中.1. add是直接添加 一个变量.不能添加一个 集合元素,比如数组 这种写法是错误的 ,因为不能添加集合 这种写法是对的,因为直接添加元素 2. 但是addrannge 是添加一个 ...

  4. redis set类型

  5. Ajax的学习笔记(一)

    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),ajax并不是一门单独的语言,而是一种技术,是指一种创建交互式网页应用的网页开发技术. ...

  6. maven环境、本地仓储配置(下载安装)idea配置maven

    在第一步:下载maven 官网地址:http://maven.apache.org/download.cgi 下载后进行解压 解压成功 第二步:环境配置 我的电脑右键->属性->高级系统设 ...

  7. 用纯css改变默认的radio和checkbox的样式

    利用css的label的伪类(::before)代替checkbox和radio效果: 优点:需要图片来调整选中前和选中后的样式,纯css搞定 缺点:兼容性,IE8以下不支持 在线例子: css改变默 ...

  8. CocoaAsyncSocket使用

    代理的.h文件 #import <Foundation/Foundation.h> #import "GCDAsyncSocket.h" typedef void(^S ...

  9. 关于discuz 不能全文搜索的问题

    这个问题客服反馈很多次了,以为discuz 默认搜索只能搜标题,除非配置了sphinx全文搜索引擎. 但是之前比较老的员工说以前能用的,也就是discuz老版本. 今天突然想到是不是discuz纵横搜 ...

  10. CSU 1216异或最大值 (0-1 trie树)

    Description 给定一些数,求这些数中两个数的异或值最大的那个值 Input 多组数据.第一行为数字个数n,1 <= n <= 10 ^ 5.接下来n行每行一个32位有符号非负整数 ...