[LuoguP4222][CQOI2012]编号

Posted tianbusblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LuoguP4222][CQOI2012]编号相关的知识,希望对你有一定的参考价值。

题目描述

你需要给一批商品编号,其中每个编号都是一个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%的数据,1k≤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 }

 

 

以上是关于[LuoguP4222][CQOI2012]编号的主要内容,如果未能解决你的问题,请参考以下文章

LuoguP4357 [CQOI2016]K远点对

LuoguP4462 [CQOI2018]异或序列

luoguP4124 [CQOI2016]手机号码

[LuoguP4462][CQOI2018]异或序列

[luoguP3172] [CQOI2015]选数(递推+容斥原理)

BZOJ2666[cqoi2012]组装 贪心