zoukankan      html  css  js  c++  java
  • uva 129 Krypton Factor

    题意:

    如果一个字符串包含两个相邻的重复子串,则称他为困难的串

    输入k,l

    输出由前l个字符组成的,字典序第k小的困难的串

    搜啊搜,搜啊搜~~~

    优化后的check函数:

    只需要判断当前是否和前面的冲突,而不需要判断前面内部是否冲突

    所以只判断后缀即可

    #include<cstdio>
    using namespace std;
    int k,l,cnt;
    char ans[100];
    bool ok;
    /*bool check(int num)
    {
        for(int len=1;len<=num>>1;len++)
        {
           int cnt=0;
           for(int s=len+1;s<=num;s++)
           {
                   if(ans[s]==ans[s-len])
                   {
                       cnt++;
                       if(cnt==len) return false;
                }
                else cnt=0;
           }   
        }
        return true;
    }*/
    bool check(int num)
    {
        for(int len=1;len<=num<<1;len++)
        {
            int i;
            for(i=num;i>num-len;i--)
             if(ans[i]!=ans[i-len]) break;
            if(i==num-len) return false;
         }
         return true;
    }
    void dfs(int bit)
    {
        if(ok) return;
        if(cnt==k+1) 
        {
            for(int i=1;i<bit;i++) 
            {
                putchar(ans[i]);
                if(i==64&&i!=bit-1) puts("");
                else if(i%4==0&&i!=bit-1) putchar(' ');
            }
            printf("
    %d
    ",bit-1);
            ok=true;
            return; 
        }
        for(int i=0;i<l;i++)
        {
            ans[bit]=i+'A';
            if(check(bit))
            {
                cnt++;
                dfs(bit+1);
                if(ok) return;
            }
        }
    }
    int main()
    {
        while(scanf("%d%d",&k,&l))
        {
            if(!k) return 0;
            ok=false; cnt=1;
            dfs(1);
        }
    }
  • 相关阅读:
    Spring (4)框架
    Spring (3)框架
    Spring (2)框架
    javaSE面试题总结 java面试题总结
    分层结构
    三次握手
    17_网络编程
    16_多线程
    Ecplise中指定tomcat里Web项目发布文件
    Web 项目没有发布到我们安装的tomcat目录下
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7275989.html
Copyright © 2011-2022 走看看