题目描述
你需要给一批商品编号,其中每个编号都是一个7 位16 进制 数(由0~9, a-f 组成)。
为了防止在人工处理时不小心把编号弄错,要求任意两个编 号至少有三个位置对应的数字不相同。
第一个编号为“0000000”,第二个编号为不违反上述规定 的前提下最小的编号,…,每次分配一个新编号时,总是选 择不和前面编号冲突的最小编号(注意编号都是16 进制数, 可以比较大小)。
按此规律,前面若干编号分别是: 0000000,0000111,0000222,…,0000fff,0001012,0001103,0001230,00 01321,0001456,…
输入k,你的任务是求出第k 小的编号。
输入输出格式
输入格式:
一行,k
输出格式:
一行,第k 小的编号
输入输出样例
输入样例#1:
20
输出样例#1:
0001321
说明
对于100%的数据,1≤k≤200000 。
神奇的枚举!
按照题目要求枚举。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 #define MAXN 10 7 #define for10(x) for (x=0;x<16;(x)++) 8 9 int a[30][16][16][16][16][16]; 10 int main() { 11 /////freopen("loop05.in","r",stdin); 12 //freopen("loop05.out","w",stdout); 13 int a1,a2,a3,a4,a5,a6,a7,k,s=0; 14 cin>>k; 15 for10(a1) 16 for10(a2) 17 for10(a3) 18 for10(a4) 19 for10(a5) 20 for10(a6) 21 for10(a7) { 22 if(!a[0][a3][a4][a5][a6][a7] 23 &&!a[1][a2][a4][a5][a6][a7] 24 &&!a[2][a2][a3][a5][a6][a7] 25 &&!a[3][a2][a3][a4][a6][a7] 26 &&!a[4][a2][a3][a4][a5][a7] 27 &&!a[5][a2][a3][a4][a5][a6] 28 &&!a[6][a1][a4][a5][a6][a7] 29 &&!a[7][a1][a3][a5][a6][a7] 30 &&!a[8][a1][a3][a4][a6][a7] 31 &&!a[9][a1][a3][a4][a5][a7] 32 &&!a[10][a1][a3][a4][a5][a6] 33 &&!a[11][a1][a2][a5][a6][a7] 34 &&!a[12][a1][a2][a4][a6][a7] 35 &&!a[13][a1][a2][a4][a5][a7] 36 &&!a[14][a1][a2][a4][a5][a6] 37 &&!a[15][a1][a2][a3][a6][a7] 38 &&!a[16][a1][a2][a3][a5][a7] 39 &&!a[17][a1][a2][a3][a5][a6] 40 &&!a[18][a1][a2][a3][a4][a7] 41 &&!a[19][a1][a2][a3][a4][a6] 42 &&!a[20][a1][a2][a3][a4][a5]) { 43 k--; 44 if(!k) { 45 printf("%x%x%x%x%x%x%x\n",a1,a2,a3,a4,a5,a6,a7); 46 return 0; 47 } 48 a[0][a3][a4][a5][a6][a7]=true; 49 a[1][a2][a4][a5][a6][a7]=true; 50 a[2][a2][a3][a5][a6][a7]=true; 51 a[3][a2][a3][a4][a6][a7]=true; 52 a[4][a2][a3][a4][a5][a7]=true; 53 a[5][a2][a3][a4][a5][a6]=true; 54 a[6][a1][a4][a5][a6][a7]=true; 55 a[7][a1][a3][a5][a6][a7]=true; 56 a[8][a1][a3][a4][a6][a7]=true; 57 a[9][a1][a3][a4][a5][a7]=true; 58 a[10][a1][a3][a4][a5][a6]=true; 59 a[11][a1][a2][a5][a6][a7]=true; 60 a[12][a1][a2][a4][a6][a7]=true; 61 a[13][a1][a2][a4][a5][a7]=true; 62 a[14][a1][a2][a4][a5][a6]=true; 63 a[15][a1][a2][a3][a6][a7]=true; 64 a[16][a1][a2][a3][a5][a7]=true; 65 a[17][a1][a2][a3][a5][a6]=true; 66 a[18][a1][a2][a3][a4][a7]=true; 67 a[19][a1][a2][a3][a4][a6]=true; 68 a[20][a1][a2][a3][a4][a5]=true; 69 } 70 } 71 return 0; 72 }