【每日一题】8月28日题目精讲 编号
【每日一題】8月28日題目精講 編號
鏈接:https://ac.nowcoder.com/acm/problem/19925
來源:??途W
題目描述
你需要給一批商品編號,其中每個編號都是一個7位16進制數(由0~9,
a-f組成)。為了防止在人工處理時不小心把編號弄錯,要求任意兩個編號至少有三個位置對應的數字不相同。第一個編號為0000000,第二個編號為不違反上述規定的前提下最小的編號,…,每次分配一個新編號時,總是選擇不和前面編號沖突的最小編號(注意編號都是16進制數,可以比較大小)。
按此規律,前面若干編號分別是:0000000, 0000111, 0000222, …, 0000fff, 0001012,
0001103,0001230,0001321,0001456,… 輸入k,你的任務是求出第k小的編號。
輸入描述:
第一行為整數k。
輸出描述:
輸出第k小的編號(字母必須輸出小寫)。輸入保證這個編號存在。
示例1
輸入
復制
輸出
復制
備注:
對于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; }總結
以上是生活随笔為你收集整理的【每日一题】8月28日题目精讲 编号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【每日一题】8月25日题目精讲 XOR-
- 下一篇: 【每日一题】8月27日题目精讲 Is I