uva 129 - Krypton Factor

来源:互联网 发布:linux文件类型有哪些 编辑:程序博客网 时间:2024/06/08 07:05

刘汝佳《算法竞赛入门经典》的一道例题。

困难的串,没有连续的重复字符串 AA ABAB这种。。

输出第n个由前L个大写字母组成的字符串

和全排列有点像,一个字母一个字母往后面放,若满足条件,为困难的串,则继续递归。

#include<cstdio>#include<cstring>const int MAXN=100;char a[MAXN];int n,L,cnt;bool dfs(int cur){    if(cnt++ == n){        for(int i=0;i<cur;i++){            if(i%64==0 && i) printf("\n");          //若16组后要先换行            else if(i%4==0 && i) printf(" ");       //每4个用空格隔开            printf("%c",a[i]+'A');        }        printf("\n");        printf("%d\n",cur);        return false;    }    for(int i=0;i<L;i++){        a[cur]=i;        int ok=1;        for(int j=1;j*2<=cur+1;j++){            int equal=1;            for(int k=0;k<j;k++)                                //判断是否连续相同的字符串                if(a[cur-k]!=a[cur-k-j]) {equal=0;break;}            if(equal) {ok=0;break;}        }        if(ok) if(!dfs(cur+1)) return false;    }    return true;}int main(){    //freopen("in.txt","r",stdin);    while(~scanf("%d%d",&n,&L)){        if(n==0 && L==0) break;        memset(a,0,sizeof(a));        cnt=0;        dfs(0);    }    return 0;}


 

0 0
原创粉丝点击