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. 电路设计软件 电路模拟软件 sPlan , LTspice 等

    电路设计/PCB绘制 立创EDA https://lceda.cn/ sPlan http://www.electronic-software-shop.com/splan-70.html?langu ...

  2. IOS SQLite函数总结

    SQL语句的种类 ●  数据定义语句(DDL:Data Definition Language) ●  包括create和drop等操作 ●  在数据库中创建新表或删除表(create table或 ...

  3. win10启动项添加方法

    1.添加或删除启动文件夹下的快捷方式实现开机自启动 我们可以直接将应用软件的快捷方式拖到启动文件夹里,下次开机时便会自动运行这些软件. 不需要开机启动某些软件了就将启动文件夹里的该软件的快捷方式删除掉 ...

  4. Feature分支

    软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合 ...

  5. 创建Android环境并且安装cordova

    需要eclipse.Andriod SDK.java.Apache ant.Node.js.Genymotion 目录链接: 1.安装adt-eclipse 2.安装JAVA 3.安装Apache a ...

  6. 第37章 基于SD卡的FatFs文件系统—零死角玩转STM32-F429系列

    第37章     基于SD卡的FatFs文件系统 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  7. 使用C#的新特性:可空类型

    随着C#语言最新标准的出炉,现在它也提供了对可空类型的支持.这个小变化将会在处理那些包括可选项的数据库记录时非常有用.当然在其他地方,它也是非常有用的. 简单说来,可空数据类型就是包含了所定义的数据类 ...

  8. 6.安装使用vue-quill-editor

    前言: 在vue项目中,因为涉及到使用文本编辑器, 恰恰vue-quill-editor就是一个简单实用的富文本编辑器. 参考文档:vue中使用vue-quill-editor富文本编辑器,自定义to ...

  9. MySQL如何计算重要的指标,来确定配置是否正确

    在调优MySQL数据库和监控数据库时,很多朋友不知道如何下手,怎么来确定是不是参数设置的合理,下面给出一些如何计算指标,来确定数据库参数是否设置合理,希望给大家一些方法,去做MySQL数据库优化,最好 ...

  10. 简版会员私信表设计及sql 私信列表查询

    先上下表结构和数据 DROP TABLE IF EXISTS `message`; CREATE TABLE `message` ( `id` int(11) NOT NULL AUTO_INCREM ...