首先有一个直观暴力的想法..
枚举每个数,如果这个数可行的话,就加进答案里,然后把和它超过4个位置相同的数去掉。
然后正解真的是这个>_<
假设取到了数x,只要和x有5位相同的数就可以排除掉..
暴力C(7,5)=21种枚举那5个位置是啥,f[id][i][j][k][a][b]表示第id种位置,5个位置上的数是i,j,k,a,b,是否被已排除。
一个数可行的话,就得21种位置上的数都没被排除。
这复杂度竟然能过....O(16^7)
1 #include2 #include 3 #include 4 #include 5 #define ll long long 6 #define d double 7 using namespace std; 8 const int maxn=200233; 9 bool f[21][17][17][17][17][17];10 11 int ra;char rx;12 inline int read(){13 rx=getchar(),ra=0;14 while(rx<'0'||rx>'9')rx=getchar();15 while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra;16 }17 inline void outx(int i,int j,int k,int l,int a,int b,int c){18 int v[16]={ '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};19 printf("%c%c%c%c%c%c%c\n",v[i],v[j],v[k],v[l],v[a],v[b],v[c]);20 }21 int main(){22 int i,j,k,n;register int l,a,b,c;23 n=read();24 for(i=0;i<16;i++)for(j=0;j<16;j++)for(k=0;k<16;k++)for(l=0;l<16;l++)for(a=0;a<16;a++)for(b=0;b<16;b++)for(c=0;c<16;c++)25 if(26 !f[0][i][j][k][l][a]27 &&!f[1][i][j][k][l][b]28 &&!f[2][i][j][k][a][b]29 &&!f[3][i][j][l][a][b]30 &&!f[4][i][k][l][a][b]31 &&!f[5][j][k][l][a][b]32 &&!f[6][i][j][k][l][c]33 &&!f[7][i][j][k][a][c]34 &&!f[8][i][j][l][a][c]35 &&!f[9][i][k][l][a][c]36 &&!f[10][j][k][l][a][c]37 &&!f[11][i][j][k][b][c]38 &&!f[12][i][j][l][b][c]39 &&!f[13][i][k][l][b][c]40 &&!f[14][j][k][l][b][c]41 &&!f[15][i][j][a][b][c]42 &&!f[16][i][k][a][b][c]43 &&!f[17][j][k][a][b][c]44 &&!f[18][i][l][a][b][c]45 &&!f[19][j][l][a][b][c]46 &&!f[20][k][l][a][b][c]47 ){48 n--;49 if(!n){outx(i,j,k,l,a,b,c);return 0;}50 f[0][i][j][k][l][a]51 =f[1][i][j][k][l][b]52 =f[2][i][j][k][a][b]53 =f[3][i][j][l][a][b]54 =f[4][i][k][l][a][b]55 =f[5][j][k][l][a][b]56 =f[6][i][j][k][l][c]57 =f[7][i][j][k][a][c]58 =f[8][i][j][l][a][c]59 =f[9][i][k][l][a][c]60 =f[10][j][k][l][a][c]61 =f[11][i][j][k][b][c]62 =f[12][i][j][l][b][c]63 =f[13][i][k][l][b][c]64 =f[14][j][k][l][b][c]65 =f[15][i][j][a][b][c]66 =f[16][i][k][a][b][c]67 =f[17][j][k][a][b][c]68 =f[18][i][l][a][b][c]69 =f[19][j][l][a][b][c]70 =f[20][k][l][a][b][c]71 =1;72 }73 }