【每日一题】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;
}