【每日一题】8月28日题目精讲 编号
链接:https://ac.nowcoder.com/acm/problem/19925
来源:牛客网
题目描述
你需要给一批商品编号,其中每个编号都是一个7位16进制数(由0~9,
a-f组成)。为了防止在人工处理时不小心把编号弄错,要求任意两个编号至少有三个位置对应的数字不相同。第一个编号为0000000,第二个编号为不违反上述规定的前提下最小的编号,…,每次分配一个新编号时,总是选择不和前面编号冲突的最小编号(注意编号都是16进制数,可以比较大小)。
按此规律,前面若干编号分别是:0000000, 0000111, 0000222, …, 0000fff, 0001012,
0001103,0001230,0001321,0001456,… 输入k,你的任务是求出第k小的编号。
输入描述:
第一行为整数k。
输出描述:
输出第k小的编号(字母必须输出小写)。输入保证这个编号存在。
示例1
输入
复制
20
输出
复制
0001321
备注:
对于30%的数据,k≤200;
对于70%的数据,k≤10000;
对于100%的数据,k≤200000。
题解:
暴力出奇迹。。。
题目要求至少有三个位置对应的数字不相同
一个七个数,所以存五个数的信息就行,因为如果五个数一样那肯定不符合要求
七个选五个一共是21种方案
dp[i][a][b][c][d][e]表示第i个位置,5个位置的数是a,b,c,d,e
如果一个数可行也就是21种位置上的数都没被排除
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define MAXN 10
#define for10(x) for (x=0;x<16;(x)++)
int a[30][16][16][16][16][16];
int main() {
/freopen("loop05.in","r",stdin);
//freopen("loop05.out","w",stdout);
int a1,a2,a3,a4,a5,a6,a7,k,s=0;
cin>>k;
for10(a1)
for10(a2)
for10(a3)
for10(a4)
for10(a5)
for10(a6)
for10(a7) {
if(!a[0][a3][a4][a5][a6][a7]
&&!a[1][a2][a4][a5][a6][a7]
&&!a[2][a2][a3][a5][a6][a7]
&&!a[3][a2][a3][a4][a6][a7]
&&!a[4][a2][a3][a4][a5][a7]
&&!a[5][a2][a3][a4][a5][a6]
&&!a[6][a1][a4][a5][a6][a7]
&&!a[7][a1][a3][a5][a6][a7]
&&!a[8][a1][a3][a4][a6][a7]
&&!a[9][a1][a3][a4][a5][a7]
&&!a[10][a1][a3][a4][a5][a6]
&&!a[11][a1][a2][a5][a6][a7]
&&!a[12][a1][a2][a4][a6][a7]
&&!a[13][a1][a2][a4][a5][a7]
&&!a[14][a1][a2][a4][a5][a6]
&&!a[15][a1][a2][a3][a6][a7]
&&!a[16][a1][a2][a3][a5][a7]
&&!a[17][a1][a2][a3][a5][a6]
&&!a[18][a1][a2][a3][a4][a7]
&&!a[19][a1][a2][a3][a4][a6]
&&!a[20][a1][a2][a3][a4][a5]) {
k--;
if(!k) {
printf("%x%x%x%x%x%x%x\n",a1,a2,a3,a4,a5,a6,a7);
return 0;
}
a[0][a3][a4][a5][a6][a7]=true;
a[1][a2][a4][a5][a6][a7]=true;
a[2][a2][a3][a5][a6][a7]=true;
a[3][a2][a3][a4][a6][a7]=true;
a[4][a2][a3][a4][a5][a7]=true;
a[5][a2][a3][a4][a5][a6]=true;
a[6][a1][a4][a5][a6][a7]=true;
a[7][a1][a3][a5][a6][a7]=true;
a[8][a1][a3][a4][a6][a7]=true;
a[9][a1][a3][a4][a5][a7]=true;
a[10][a1][a3][a4][a5][a6]=true;
a[11][a1][a2][a5][a6][a7]=true;
a[12][a1][a2][a4][a6][a7]=true;
a[13][a1][a2][a4][a5][a7]=true;
a[14][a1][a2][a4][a5][a6]=true;
a[15][a1][a2][a3][a6][a7]=true;
a[16][a1][a2][a3][a5][a7]=true;
a[17][a1][a2][a3][a5][a6]=true;
a[18][a1][a2][a3][a4][a7]=true;
a[19][a1][a2][a3][a4][a6]=true;
a[20][a1][a2][a3][a4][a5]=true;
}
}
return 0;
}