zoukankan      html  css  js  c++  java
  • 【BZOJ 2665】 2665: [cqoi2012]编号(暴力?)

    2665: [cqoi2012]编号

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 347  Solved: 217

    Description

    你需要给一批商品编号,其中每个编号都是一个7位16进制数(由0~9, a-f组成)。为了防止在人工处理时不小心把编号弄错,要求任意两个编号至少有三个位置对应的数字不相同。第一个编号为0000000,第二个编号为不违反上述规定的前提下最小的编号,…,每次分配一个新编号时,总是选择不和前面编号冲突的最小编号(注意编号都是16进制数,可以比较大小)。按此规律,前面若干编号分别是:0000000, 0000111, 0000222, …, 0000fff, 0001012, 0001103,0001230,0001321,0001456,…
    输入k,你的任务是求出第k小的编号。

    Input

    第一行为整数k

    Output

    输出第k小的编号(字母必须输出小写)。输入保证这个编号存在。

    Sample Input

    20

    Sample Output

    0001321

    HINT


    编号


    1-3


    4-7


    8-10


    k


    <=200


    <=10000


    <=200000

    Source

    【分析】

      如此恶心的暴力??

      就是说,保证至少5个位置不一样就好了。

      7个里面选5个有21种方法。

      就f[x][i][j][k][a][b][c]表示x状态,第1位是i,第二位是j。。。。这种数前面有没有存在。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 bool f[25][16][16][16][16][16];
     9 char s[20]="0123456789abcdef";
    10 
    11 int main()
    12 {
    13     int n,nw=0;
    14     scanf("%d",&n);
    15     memset(f,0,sizeof(f));
    16     for(int i=0;i<16;i++)for(int j=0;j<16;j++)
    17     for(int k=0;k<16;k++)for(int l=0;l<16;l++)
    18     for(int a=0;a<16;a++)for(int b=0;b<16;b++)for(int c=0;c<16;c++)
    19     {
    20         if(f[1][i][j][k][l][a]||f[2][i][j][k][l][b]||f[3][i][j][k][l][c]||f[4][i][j][k][a][b]||
    21            f[5][i][j][k][a][c]||f[6][i][j][k][b][c]||f[7][i][j][l][a][b]||f[8][i][j][l][a][c]||
    22            f[9][i][j][l][b][c]||f[10][i][j][a][b][c]||f[11][i][k][l][a][b]||f[12][i][k][l][a][c]||
    23            f[13][i][k][l][b][c]||f[14][i][k][a][b][c]||f[15][i][l][a][b][c]||f[16][j][k][l][a][b]||
    24            f[17][j][k][l][a][c]||f[18][j][k][l][b][c]||f[19][j][k][a][b][c]||f[20][j][l][a][b][c]||f[21][k][l][a][b][c])
    25         continue;
    26         nw++;
    27         if(nw==n) {printf("%c%c%c%c%c%c%c
    ",s[i],s[j],s[k],s[l],s[a],s[b],s[c]);return 0;}
    28         f[1][i][j][k][l][a]=f[2][i][j][k][l][b]=f[3][i][j][k][l][c]=f[4][i][j][k][a][b]=
    29         f[5][i][j][k][a][c]=f[6][i][j][k][b][c]=f[7][i][j][l][a][b]=f[8][i][j][l][a][c]=
    30         f[9][i][j][l][b][c]=f[10][i][j][a][b][c]=f[11][i][k][l][a][b]=f[12][i][k][l][a][c]=
    31         f[13][i][k][l][b][c]=f[14][i][k][a][b][c]=f[15][i][l][a][b][c]=f[16][j][k][l][a][b]=
    32         f[17][j][k][l][a][c]=f[18][j][k][l][b][c]=f[19][j][k][a][b][c]=f[20][j][l][a][b][c]=f[21][k][l][a][b][c]=1;
    33     }
    34     return 0;
    35 }
    View Code

    2017-04-06 08:48:53

  • 相关阅读:
    UI测试
    软件测试用例详解(转载)
    Mac设置命令别名
    CentOS7 开启免密登陆
    使用systemctl命令管理服务mysql
    Redis学习笔记02--主从数据库配置
    CentOS使用dnf安装Redis
    CentOS 7 防火墙设置
    Redis学习笔记01---配置文件
    CentOS7搭建Maven的Nexus私服仓库
  • 原文地址:https://www.cnblogs.com/Konjakmoyu/p/6671816.html
Copyright © 2011-2022 走看看