• UVA-129 Krypton Factor(回溯)


    题目大意:由字母A到Z组成的字符串,其中有两个子串完全相同的叫做容易的串,反之叫困难的串。找出由前L个字母组成的第n个困难的串。

    题目分析:简单回溯,不过要判断是否存在重复子串比较棘手。《入门经典》上借鉴八皇后问题,只判断添进字符后是否存在连续子串。具体做法是这样的,以长度为对象枚举以新添进字符为尾巴的子串,看是否重复。

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    
    int n,k,cnt,path[1000];
    
    void dfs(int cur)
    {
        if(cur>81)
            return ;
        if(cnt++==n){
            for(int i=0;i<cur;++i){
                printf("%c",char(path[i]+'A'));
                if(i%4==3&&i!=cur-1){
                    if(i%64==63)
                        printf("
    ");
                    else
                        printf(" ");
                }
            }
            printf("
    %d
    ",cur);
            return ;
        }
        for(int i=0;i<k;++i){
            path[cur]=i;
            int flag=1;
            for(int j=1;j*2<=cur+1;++j){
                int ok=1;
                for(int l=0;l<j;++l)
                    if(path[cur-l]!=path[cur-l-j]){
                        ok=0;
                        break;
                    }
                if(ok){
                    flag=0;
                    break;
                }
            }
            if(flag)
                dfs(cur+1);
            if(cnt>n)
                return ;
        }
    }
    
    int main()
    {
        while(scanf("%d%d",&n,&k)&&(n+k))
        {
            cnt=0;
            dfs(0);
        }
        return 0;
    }
    

      

  • 相关阅读:
    django的第一次使用
    python操作文件要点
    MySQL作业笔记及总结
    ASP.NET MVC——学习WebAPI
    编写PHP框架,深入了解MVC运行流程
    MySql(分表、增量备份、还原)
    ASP.NET MVC——MVC过滤器
    ASP.NET MVC——MVC-路由
    ASP.NET MVC——MVC4优化
    JS判断指定按键(组合键)是否被按下
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4844179.html
Copyright © 2020-2023  润新知