zoukankan      html  css  js  c++  java
  • 困难串

    /*困难串(无两个相邻的重复字串)*/
    #include <iostream>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<cmath>
    #include<string.h>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    #define maxn 1000
    int cnt,n,L;
    int S[maxn];
    int dfs(int cur)//返回0表示已经得到解,无须继续搜索
    {
        int i,ok,j,k,equals;
        if(cnt++==n)//输出方案
        {
            for(i=0; i<cur; i++)
                printf("%c",'A'+S[i]);
            printf("
    ");
            return 0;
        }
        for(i=0; i<L; i++)
        {
            S[cur]=i;
            ok=1;
            for(j=1; 2*j<=cur+1; j++) //尝试长度为j*2的后缀
            {
                equals=1;
                for(k=0; k<j; k++)
                    if(S[cur-k]!=S[cur-k-j])//检查后一半是否等于前一半
                    {
                        equals=0;
                        break;
                    }
                if(equals)//递归搜索,如果找到解,则直接退出
                {
                    ok=0;
                    break;
                }
            }
            if(ok)
                if(!dfs(cur+1))
                    return 0;
        }
        return 1;
    }
    int main()
    {
        while(~scanf("%d%d",&n,&L))
        {
            cnt=0;
            dfs(0);
        }
        return 0;
    }
    /*输出由前L个字符组成的,字典序第n小的困难的串*/
  • 相关阅读:
    zip
    sublime 3 注册码
    css3 文本控制自动换行
    ST3 package control
    cf1139D-Steps to One
    2019-2020 ACM-ICPC, Asia Xuzhou Regional Contest
    2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest
    Tree
    B
    多源对多源最短路
  • 原文地址:https://www.cnblogs.com/heqinghui/p/3205573.html
Copyright © 2011-2022 走看看