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要求的输出末尾换行。。

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

【代码】

 1 /*
 2 ID: icedrea1
 3 PROB: hamming
 4 LANG: C++
 5 */
 6
 7 #include <iostream>
 8 #include <fstream>
 9 using namespace std;
10
11 void DtoB(int num)
12 {
13     int bit[10],l=0;
14     while(num) { bit[l++]=num&1; num>>=1; }
15     for(int i=l;i<7;++i) cout<<0;
16     for(int i=l-1;i>=0;--i) cout<<bit[i];
17 }
18 void look()
19 {
20     ifstream in("hamming.out");
21
22     int num;
23     while(in>>num)
24     {
25         DtoB(num);
26         cout<<endl;
27     }
28
29     in.close();
30 }
31
32 // just a look -----------------------------------------------------------
33 // go~!
34
35 int N,B,D;
36 bool have[256];
37
38 int num[64],sum;
39
40 int dis(int x,int y)
41 {
42     int s=0;
43     while(x||y) { s+=(x^y)&1; x>>=1; y>>=1; }
44     return s;
45 }
46
47 void del(int x)
48 {
49     for(int y=0;y<(1<<B);++y)
50         if(dis(x,y)<D) have[y]=false;
51 }
52
53 void print(ostream &out)
54 {
55     for(int i=0;i<sum-1;++i) out<<num[i]<<(i%10==9?"\n":" ");
56     out<<num[sum-1]<<endl;
57 }
58
59 int main()
60 {
61     //look(); return 0;
62     ifstream in("hamming.in");
63     ofstream out("hamming.out");
64
65     in>>N>>B>>D;
66     for(int x=0;x<(1<<B);++x) have[x]=true;
67     for(int x=0;x<(1<<B) && sum<N;++x)
68     {
69         if(!have[x]) continue;
70         num[sum++]=x; del(x);
71     }
72
73     if(sum<N) out<<"not enough!"<<endl; else print(out);
74
75     in.close();
76     out.close();
77     return 0;
78 }

转载于:https://www.cnblogs.com/icedream61/p/4353836.html

USACO Section2.1 Hamming Codes 解题报告 【icedream61】相关推荐

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

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

  2. USACO Section1.3 Combination Lock 解题报告

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

  3. USACO Section1.5 Superprime Rib 解题报告

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

  4. USACO 3.3.2 Shopping Offers解题报告

    写在前面:因为之前没写的C++的USACO Training的解题报告太多--所以就不写了,要是想要代码可以联系我:xiedong_1993@foxmail.com 这题就是传说中的五维背包,其实写起 ...

  5. USACO Training Section 1.3 Calf Flac 解题报告AC代码

    解题报告: 主要方法是生长法,考虑每一位的左右各有多长的回文串,输出最长的那个,比较好想--不过要注意区分字串的奇偶. 其他实现细节看代码里的注释吧-- AC代码: /* ID: yuanmz91 P ...

  6. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  7. 洛谷P1461 海明码 Hamming Codes

    P1461 海明码 Hamming Codes 98通过 120提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 给出 N,B 和 ...

  8. 解题报告 (十四) 数位DP

    文章目录 数位DP 解题报告 HDU 4722 Good Numbers HDU 2089 不要62 HDU 3555 Bomb HDU 3652 B-number PKU 3252 Round Nu ...

  9. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

最新文章

  1. 美国新规:自动驾驶车,从此不需要驾驶位了
  2. 人人都能学会的python编程教程11:定义函数
  3. A Famous Music Composer
  4. WebMagic之爬虫监控
  5. [ZOJ 4024] Peak
  6. python读取usb扫码枪数据_USB
  7. MYSQL数据库VALUES_MYSQL入门大全来啦!
  8. python 循环技巧
  9. openssh登陆时提示服务器拒绝了密码
  10. django23:BS4/kindeditor上传图片
  11. raw input()和input区别
  12. 来看看比尔盖茨当年写的BASIC解释器源代码吧,你就知道泰勒级数有什么用了...
  13. LeetCode 2105. 给植物浇水 II(双指针)
  14. Spring中引入其他配置文件
  15. cesium获取模型实时坐标_Cesium 顶点着色器中解算模型坐标
  16. 使用手机访问电脑上写的网页
  17. 万能Ghost系统制作教程(龙帝国论坛)
  18. w10连接远程计算机控制,win10系统教你如何远程控制他人电脑的方法
  19. 未明学院:大学四年应当如何度过,才算不辜负?
  20. 浩辰3D软件中装配零件的操作技巧

热门文章

  1. js 指定滚动条位置
  2. 浙江电信网上营业厅的一个BUG(有更新)
  3. Proftpd(MySQL验证+配额)配置
  4. 实训第二天的收获beep~~~
  5. 简单总结PPPoE设置
  6. BlueIdea 7周年 北京欢天喜地大聚会
  7. python中re模块的函数_python中的re模块,常用函数介绍
  8. js预览本地word文档_怎么免费下载百度文库付费文档?
  9. 雷凌linux车机升级_绿老师学堂:15万合资车谁更“聪明”?体验思域/福克斯/雷凌车机...
  10. 应用架构设计“着火”“防火”经验之谈