英文原题 中文题译
大致题意:
给定N、B、D,找N个二进制位数不大于B(即<2^B)的数使得其两两间二进制海明距离至少为D,要求输出最小的序列,每十个数一行。
样例输入N=16,B=7,D=3
输出的二进制分析:
0000000 : 0 1110000 : 7 1001100 : 25 0111100 : 30
0101010 : 42 1011010 : 45 1100110 : 51 0010110 : 52
1101001 : 75 0011001 : 76 0100101 : 82 1010101 : 85
1000011 : 97 0110011 : 102 0001111 : 120 1111111 : 127
可以看到这些数其实是很有规律的,应该可以推算出来(相当于在B维网格上找N个距离为D的点)。比如:
规律1:距离为3,则前3位从0到7循环变化,每两个数为一组,刚好在前3位取反;
规律2:4-5位从0开始,从0到3循环变化,每4个数为一组,组内两两取反。
...这样,7=3+2+1+1,可以推算出全部数值。不过要编程实现,需要全部细节,这就不继续考虑了。
实现采取暴力方式,从0开始逐个搜,比较每个数与前面已存的数的海明距离,满足条件则保存。从B<=8也就知状态空间足够小,方案可行。且:B这个参数事实上无用,题目给的数据会使得满足条件的数的位数不大于B,否则无解。题意中无无解这项,也就是可以不考虑B。
计算海明距离采用之前N皇后问题同样的方法:先求两数的异或,使相同位都为0,不同位为1.然后得到最低位的1,不断的减去,从而计算二进制表示中1的个数,即其海明距离。
需要注意的是输出的格式,USACO严格要求格式:第一个数前不能有空格,每行最后一个数后不能有空格,整个输出必须以\n结束。
大致题意:
给定N、B、D,找N个二进制位数不大于B(即<2^B)的数使得其两两间二进制海明距离至少为D,要求输出最小的序列,每十个数一行。
样例输入N=16,B=7,D=3
输出的二进制分析:
0000000 : 0 1110000 : 7 1001100 : 25 0111100 : 30
0101010 : 42 1011010 : 45 1100110 : 51 0010110 : 52
1101001 : 75 0011001 : 76 0100101 : 82 1010101 : 85
1000011 : 97 0110011 : 102 0001111 : 120 1111111 : 127
可以看到这些数其实是很有规律的,应该可以推算出来(相当于在B维网格上找N个距离为D的点)。比如:
规律1:距离为3,则前3位从0到7循环变化,每两个数为一组,刚好在前3位取反;
规律2:4-5位从0开始,从0到3循环变化,每4个数为一组,组内两两取反。
...这样,7=3+2+1+1,可以推算出全部数值。不过要编程实现,需要全部细节,这就不继续考虑了。
实现采取暴力方式,从0开始逐个搜,比较每个数与前面已存的数的海明距离,满足条件则保存。从B<=8也就知状态空间足够小,方案可行。且:B这个参数事实上无用,题目给的数据会使得满足条件的数的位数不大于B,否则无解。题意中无无解这项,也就是可以不考虑B。
计算海明距离采用之前N皇后问题同样的方法:先求两数的异或,使相同位都为0,不同位为1.然后得到最低位的1,不断的减去,从而计算二进制表示中1的个数,即其海明距离。
需要注意的是输出的格式,USACO严格要求格式:第一个数前不能有空格,每行最后一个数后不能有空格,整个输出必须以\n结束。
/* ID: blackco3 TASK: hamming LANG: C++ */ #include <fstream> using namespace std; #define _max_ 64 int _num, _len, _dis, _nums[_max_]={0} ; inline int hamming_dis( int n1, int n2 ){ register int dif= n1^n2, count=0, pos ; while( dif ) pos = dif & -dif , dif -= pos , count++; return count ; } inline int test_dis(int cnum, int npre) { for( int i=0; i<npre; i++ ) if( hamming_dis(cnum, _nums[i])<_dis ) return 0 ; return 1 ; } int main() { ifstream fin("hamming.in"); ofstream fout("hamming.out"); fin >> _num >> _len >> _dis ; for( int i=0, cur=0 ; i<_num; i++ ){ while( !test_dis(cur,i) ) cur++; _nums[i]=cur++ ; if( i%10 ) fout << " " ; fout << _nums[i] ; if( !((i+1)%10) || i==_num-1) fout << endl ; } return 0; }
发表评论
-
USACO Training Section 4.2 Cowcycles
2010-01-31 21:11 886英文原题 中文题译 ... -
USACO Training Section 4.2 Job Processing
2010-01-30 17:31 1133英文原题 中文题译 大意: 有N个工件,每个工件要经 ... -
USACO Training Section 4.2 Drainage Ditches ISAP非递归和多路增广递归
2010-01-29 19:39 1849郁闷。不小心覆盖了重 ... -
USACO Training Section 4.2 The Perfect Stall 匈牙利算法的递归和非递归实现
2010-01-28 21:21 1645英文原题 中文题译 ... -
USACO Training Section 4.1 Cryptcowgraphy 奶牛密码
2010-01-27 20:58 1195英文原题 中文题译 大意: 奶牛们要从农场逃跑 ... -
USACO Training Section 4.1 Beef McNuggets
2010-01-26 21:37 968英文原题 中文题译 大意: 给定N个正整数, ... -
USACO Training Section 4.1 Fence Loops
2010-01-24 20:14 1066英文原题 大意: 农夫布朗的牧场上的篱笆已经失 ... -
USACO Training Section 3.4 Closed Fences
2010-01-23 17:50 1405英文原题 题意 一个 ... -
USACO Training Section 3.4 American Heritage
2010-01-21 23:19 772英文原题 大意:有一个由最多26个大写字母构成的二叉树 ... -
USACO Training Section 3.4 Raucous Rockers
2010-01-21 23:09 799英文原题 大意:有S首歌,要放到D个CD里。每首歌有一个 ... -
USACO Training Section 3.4 Electric Fence
2010-01-21 12:57 971英文原题 大意:给定一个三角形(0,0),(m,n),( ... -
USACO Training Section 3.3 Riding the Fences
2010-01-20 23:38 1207英文原题 中文题译 经典的求欧拉路径:给定最多两个奇 ... -
USACO Training Section 3.3 Shopping Offers
2010-01-19 22:18 916英文原题 中文题译 这是个与日常生活相关的题。商场促销 ... -
USACO Training Section 3.3 A Game
2010-01-19 20:54 1094英文原题 有如下一个双人游戏:N(2 <= N & ... -
USACO Training Section 3.3 Home on the Range
2010-01-19 19:36 772英文原题 中文题译 大意:给定一个01矩阵,计算其中全为 ... -
USACO Training Section 3.3 Camelot
2010-01-19 03:39 1232英文原题 中文题译 ... -
USACO Training Section 3.2 Sweet Butter
2010-01-19 00:10 1046英文原题 中文题译 大意:农场之间有路构成稀疏无向图,若 ... -
USACO Training Section 3.2 Magic Squares
2010-01-18 23:11 930英文原题 中文题译 大意:有人发明了一种有8个块三种变换 ... -
USACO Training Section 3.2 Feed Ratios
2010-01-18 20:52 1307英文原题 中文题译 大意:给出整数a[i][j]和 ... -
USACO Training Section 3.2 Spinning Wheels
2010-01-18 19:37 868英文原题 中文题译 大意:有五个纺车飞轮,每个都有最多五 ...
相关推荐
ACM----USACO Training(解题博客网),提供了USACO Training解题的代码,可以参考一下
自己前一段时间在坐usaco上的题目,一遍看题解,一遍做,做到第三章,就做不动了,发一些源程序和测试数据。
usaco历年测试数据
自己写的usaco_training带代码。供参考,有一道题是cheat的。自己看吧。
usaco测试数据+标程 usaco的section1到section5的所有测试数据 以及标准程序
usaco2.1解题报告1
usaco解题报告,就是usaco.training.gateway上面的题目全解
USACO题解+代码+翻译,好东西,超级齐全,对大家帮助不小,特别是现在nocow挂了
usaco section2.3--section5.5源程序。。。。。。。。。。。。。。。。
[USACO 1.1.4]破碎的项链.cpp
USACO全部译题 USACO Training Program Gateway
USACO_培训USACO_培训Ride.java-> Gift1.java->
2.1 Section 2.1 2.2 Section 2.2 2.3 Section 2.3 2.4 Section 2.4 3 Chapter3 3.1 Section 3.1 3.2 Section 3.2 3.3 Section 3.3 3.4 Section 3.4 4 Chapter4 4.1 Section 4.1 4.2 Section 4.2 4.3 Section 4.3 ...
USACO training 教程翻译合集(清晰明确)
USACO培训页面美国计算机奥林匹克训练页2015年6月17日开始
One of the answer of the USACO training exercises.
usaco 合集,包括英文原题和中文译题,测试数据以及答案,很全啊!usaco 合集usaco 合集usaco 合集usaco 合集
USACO题目中英文翻译,包含section1.3~1.5 2.1
usaco 2010-2011 nov news,喜欢usaco的朋友可以看看
usaco题库的Section2.1部分的castle问题解法源代码