P4222 [CQOI2012] 编号
Nostopathy · · 题解
这道题让我深刻地体会到了打史山代码的快乐。
一共
设
于是可以枚举所有位上的值,如果当前状态的一种表示被占用了就不能更新,否则将所有状态表示方法标记为占用。注意这里的全部
当达到
#include <bits/stdc++.h>
using namespace std;
#define int long long
int k, r[22][16][16][16][16][16];
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> k;
for(int a = 0; a < 16; ++ a)
for(int b = 0; b < 16; ++ b)
for(int c = 0; c < 16; ++ c)
for(int d = 0; d < 16; ++ d)
for(int e = 0; e < 16; ++ e)
for(int f = 0; f < 16; ++ f)
for(int g = 0; g < 16; ++ g){
if(!(r[1][a][b][c][d][e] || r[2][a][b][c][d][f] || r[3][a][b][c][d][g] || r[4][a][b][c][e][f] || r[5][a][b][c][e][g]
|| r[6][a][b][c][f][g] || r[7][a][b][d][e][f] || r[8][a][b][d][e][g] || r[9][a][b][d][f][g] || r[10][a][b][e][f][g]
|| r[11][a][c][d][e][f] || r[12][a][c][d][e][g] || r[13][a][c][d][f][g] || r[14][a][c][e][f][g] || r[15][a][d][e][f][g]
|| r[16][b][c][d][e][f] || r[17][b][c][d][e][g] || r[18][b][c][d][f][g] || r[19][b][c][e][f][g] || r[20][b][d][e][f][g]
|| r[21][c][d][e][f][g])){
if(! -- k){
int res[8] = {a, b, c, d, e, f, g};
for(int i = 0; i < 7; ++ i)
cout << char(res[i] < 10 ? res[i] + '0' : 'a' + res[i] - 10);
return 0;
}
r[1][a][b][c][d][e] = r[2][a][b][c][d][f] = r[3][a][b][c][d][g] = r[4][a][b][c][e][f] = r[5][a][b][c][e][g]
= r[6][a][b][c][f][g] = r[7][a][b][d][e][f] = r[8][a][b][d][e][g] = r[9][a][b][d][f][g] = r[10][a][b][e][f][g]
= r[11][a][c][d][e][f] = r[12][a][c][d][e][g] = r[13][a][c][d][f][g] = r[14][a][c][e][f][g] = r[15][a][d][e][f][g]
= r[16][b][c][d][e][f] = r[17][b][c][d][e][g] = r[18][b][c][d][f][g] = r[19][b][c][e][f][g] = r[20][b][d][e][f][g]
= r[21][c][d][e][f][g] = 1;
}
}
return 0;
}