【BZOJ 2665】 2665: [cqoi2012]编号(暴力?)

2665: [cqoi2012]编号

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 347  Solved: 217

Description

你需要给一批商品编号,其中每个编号都是一个7位16进制数(由0~9, a-f组成)。为了防止在人工处理时不小心把编号弄错,要求任意两个编号至少有三个位置对应的数字不相同。第一个编号为0000000,第二个编号为不违反上述规定的前提下最小的编号,…,每次分配一个新编号时,总是选择不和前面编号冲突的最小编号(注意编号都是16进制数,可以比较大小)。按此规律,前面若干编号分别是:0000000, 0000111, 0000222, …, 0000fff, 0001012, 0001103,0001230,0001321,0001456,…
输入k,你的任务是求出第k小的编号。

Input

第一行为整数k

Output

输出第k小的编号(字母必须输出小写)。输入保证这个编号存在。

Sample Input

20

Sample Output

0001321

HINT


编号


1-3


4-7


8-10


k


<=200


<=10000


<=200000

Source

 

 

 

 

【分析】

  如此恶心的暴力??

  就是说,保证至少5个位置不一样就好了。

  7个里面选5个有21种方法。

  就f[x][i][j][k][a][b][c]表示x状态,第1位是i,第二位是j。。。。这种数前面有没有存在。

 

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 
 8 bool f[25][16][16][16][16][16];
 9 char s[20]="0123456789abcdef";
10 
11 int main()
12 {
13     int n,nw=0;
14     scanf("%d",&n);
15     memset(f,0,sizeof(f));
16     for(int i=0;i<16;i++)for(int j=0;j<16;j++)
17     for(int k=0;k<16;k++)for(int l=0;l<16;l++)
18     for(int a=0;a<16;a++)for(int b=0;b<16;b++)for(int c=0;c<16;c++)
19     {
20         if(f[1][i][j][k][l][a]||f[2][i][j][k][l][b]||f[3][i][j][k][l][c]||f[4][i][j][k][a][b]||
21            f[5][i][j][k][a][c]||f[6][i][j][k][b][c]||f[7][i][j][l][a][b]||f[8][i][j][l][a][c]||
22            f[9][i][j][l][b][c]||f[10][i][j][a][b][c]||f[11][i][k][l][a][b]||f[12][i][k][l][a][c]||
23            f[13][i][k][l][b][c]||f[14][i][k][a][b][c]||f[15][i][l][a][b][c]||f[16][j][k][l][a][b]||
24            f[17][j][k][l][a][c]||f[18][j][k][l][b][c]||f[19][j][k][a][b][c]||f[20][j][l][a][b][c]||f[21][k][l][a][b][c])
25         continue;
26         nw++;
27         if(nw==n) {printf("%c%c%c%c%c%c%c\n",s[i],s[j],s[k],s[l],s[a],s[b],s[c]);return 0;}
28         f[1][i][j][k][l][a]=f[2][i][j][k][l][b]=f[3][i][j][k][l][c]=f[4][i][j][k][a][b]=
29         f[5][i][j][k][a][c]=f[6][i][j][k][b][c]=f[7][i][j][l][a][b]=f[8][i][j][l][a][c]=
30         f[9][i][j][l][b][c]=f[10][i][j][a][b][c]=f[11][i][k][l][a][b]=f[12][i][k][l][a][c]=
31         f[13][i][k][l][b][c]=f[14][i][k][a][b][c]=f[15][i][l][a][b][c]=f[16][j][k][l][a][b]=
32         f[17][j][k][l][a][c]=f[18][j][k][l][b][c]=f[19][j][k][a][b][c]=f[20][j][l][a][b][c]=f[21][k][l][a][b][c]=1;
33     }
34     return 0;
35 }
View Code

 

2017-04-06 08:48:53

posted @ 2017-04-06 08:48  konjak魔芋  阅读(236)  评论(0编辑  收藏  举报