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小的困难的串*/
  • 相关阅读:
    Java main方法继承
    MySQL 事务
    数据库日志文件和内存刷新机制
    MySQL 存储过程
    MySQL 索引
    JVM锁优化
    JVM字节码执行引擎和动态绑定原理
    虚拟机类加载机制
    JVM内存分配与回收
    JVM垃圾收集器
  • 原文地址:https://www.cnblogs.com/heqinghui/p/3205573.html
Copyright © 2011-2022 走看看