[bzoj2665] [cqoi2012]编号
首先有一个直观暴力的想法..
枚举每个数,如果这个数可行的话,就加进答案里,然后把和它超过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 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 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 }