USACO
来源:互联网 发布:js汉字转unicode编码 编辑:程序博客网 时间:2024/06/06 14:10
Hamming Codes
题目描述
给出 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。
输入输出格式
输入格式:
一行,包括 N, B, D。
输出格式:
N 个编码(用十进制表示),要排序,十个一行。如果有多解,你的程序要输出这样的解:假如把它化为2^B进制数,它的值要最小。
输入输出样例
输入样例#1:
16 7 3
输出样例#1:
0 7 25 30 42 45 51 52 75 76
82 85 97 102 120 127
深度优先搜索,特判没有选数的情况,开一个数组 ans 保存当前搜到的情况,最先搜到了数组长度达到了要求,返回主程序,则维护的 ans 数组保存了最终结果。
另外这题要求 10 个空一行也让我第一次提交被卡掉了。
烦躁。
Code
#include<iostream>#include<cstring>using namespace std;int n,b,d,ans[64+1],cnt = 0;void dfs(int cur){ if (cnt == n) return ; if (cnt == 0) { for (int i=0;i<(1<<b);i++) { ans[cnt] = i; cnt++; dfs(i+1); cnt--; } } for (int i=cur;i<(1<<b);i++) { bool flag = true; for (int j=0;j<cnt;j++) { int hamming = 0; for (int k=0;k<b;k++) if ((i & (1 << k)) != (ans[j] & (1 << k))) hamming++; if (hamming < d) { flag = false; break; } } if (flag) { ans[cnt] = i; cnt++; dfs(i+1); if (cnt == n) return ; cnt--; } }}int main(){ cin >> n >> b >> d; dfs(0); for (int i=1;i<=cnt;i++) { cout << ans[i-1] << " "; if (i % 10 == 0 && i != 0) cout << endl; } return 0;}
阅读全文
0 0
- USACO
- USACO
- usaco
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- 对前端模块化的一些理解
- Spark SQL
- pid=4占用80端口
- HttpURLConnection用法详解
- 关于ReadFile函数错误:代码6,ERROR_INVALID_HANDLE
- USACO
- codeforces 61E 树状数组 逆向
- unity 拖动物体移动
- spring事务的传播属性,数据库事务特征,隔离级别
- JAVA使用、配置相关基础知识
- 启动tomcat 总提示“Publishing to Tomcat v6.0 Server at localhost ...错误
- Python模块:bisect二分算法模块
- UEFI Application
- loss和accuracy的关系