USACO Section2.1 Hamming Codes 解题报告 【icedream61】
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】的更多相关文章
- USACO Section2.1 The Castle 解题报告
castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section2.1 Ordered Fractions 解题报告
frac1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】
holstein解题报告 --------------------------------------------------------------------------------------- ...
- USACO Section2.2 Preface Numbering 解题报告 【icedream61】
preface解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.3 Controlling Companies 解题报告 【icedream61】
concom解题报告------------------------------------------------------------------------------------------ ...
- USACO Section2.3 Money Systems 解题报告 【icedream61】
money解题报告------------------------------------------------------------------------------------------- ...
- USACO Section2.3 Zero Sum 解题报告 【icedream61】
zerosum解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.3 Cow Pedigrees 解题报告 【icedream61】
nocows解题报告------------------------------------------------------------------------------------------ ...
- USACO Section2.3 Longest Prefix 解题报告 【icedream61】
prefix解题报告------------------------------------------------------------------------------------------ ...
随机推荐
- struts2表单提交Date数据无法接收
问题:在Struts2环境下,提交含有Date类型数据表单,但是在action中没有接收到:String就可以直接接收到: --网络搜索后,说Struts2可以自己转,但是目前没发现有: 然后在狂搜, ...
- Selenium入门11 滚动条控制(通过js)
这一节要有js基础.做web端的UI自动化必须要有html,css,javascript前端基础. 滚动条控制: 1 移动垂直滚动条 document.documentElement.scrollTo ...
- IOS @property的参数说明
1. @property的参数说明========================================ARC是苹果为了简化程序员对内存的管理,推出的一套内存管理机制使用ARC机制,对象的申 ...
- select_related()函数
Django获取数据实体的时候,返回的对象一个实体或多个实体,也就是QuerySet,它是Django专有的东西,具体的理解,它是类似Python的字典的东西,但它并不实现字典的所有方法.今天讲解的是 ...
- 打表格,字符串处理,POJ(2136)
题目链接:http://poj.org/problem?id=2136 水题WA了半天,结果是数组开小了. #include <stdio.h> #include <string.h ...
- CoreData的学习
第一步:创建项目是勾选coredata,当然创建的时候没有勾选,之后还可以手动生产, 然后:创建数据库模型,及为其添加模型的属性. 然后生成模型文件: 注意⚠️:首先设置为Manual/None 不 ...
- C++STL之multiset多重集合容器
multiset多重集合容器 multiset与set一样, 也是使用红黑树来组织元素数据的, 唯一不同的是, multiset允许重复的元素键值插入, 而set则不允许. multiset也需要声明 ...
- BCB:如何在BCB中使用CodeGuard
www.educity.cn 发布者:xjxyj2006 来源:网络转载 发布日期:2013年12月13日 文章评论 发表文章 一. 为什么写这篇东西 自己在使用 BCB5 写一些程序时需要检查很多东 ...
- 旧文备份:怎样利用好单片机上的存储器资源来实现OD的存储与访问
我们知道OD(对象字典)是CANopen的核心,所有功能都是围绕它开展的,是协议栈的数据中心,良好的OD实现是协议栈高效稳定运行的基础,而OD的实现最基本的一点就是怎么去保存它.因为OD的内容比较杂, ...
- 在Linux文件清空的几种方法
在Linux文件清空的几种方法 1.使用重定向的方法 [root@centos7 ~]# du -h test.txt 4.0K test.txt [root@centos7 ~]# > tes ...