Krypton Factor UVA

来源:互联网 发布:淘宝拖动滑块完成验证 编辑:程序博客网 时间:2024/06/03 23:26

题目链接:
https://vjudge.net/problem/UVA-129

大意 :
输入 N , L;
输出第 N 个的困难串,要求用前 L 个字母构成。
困难串是指一个串内不存在相邻的相同子串。如ABB就不是困难的串,ABCBC也不是困难的串。
如前 7 个困难串为:

A
AB
ABA
ABAC
ABACA
ABACAB
ABACABA

输出格式需要注意。每 4 个空一格,一行放 16 组。
每次输入保证串的长度不超过 80 。
Input:
7 3
30 3
0 0

Output:
ABAC ABA
7
ABAC ABCA CBAB CABA CABC ACBA CABA
28

#include <bits/stdc++.h>using namespace std;typedef long long ll;#define mem(s,t) memset(s,t,sizeof(s))#define D(v) cout<<#v<<" "<<v<<endl#define inf 0x3f3f3f3fint S[1000],n,l;int cnt=0;int solve(int cur){    //D(cnt);    if(cnt++==n){        int f=1,ff=1;        for(int i=0;i<cur;i++){            if(f) f=0;            else if(i%64==0) printf("\n");            else if(i%4==0) printf(" ");            printf("%c",'A'+S[i]);        }        printf("\n%d\n",cur);        return 0;    }    for(int i=0;i<l;i++){        S[cur]=i;        int ok=1;        for(int j=1;2*j<=cur+1;j++){            int equa=1;            for(int k=0;k<j;k++){                if(S[cur-j-k]!=S[cur-k]){                    equa=0;break;                }            }            if(equa) {ok=0;break;}        }        if(ok) if(!solve(cur+1)) return 0;    }    return 1;}int main() {#ifdef LOCAL    freopen("in3.txt","r ",stdin);    freopen("out.txt","w",stdout);#endif    while(~scanf("%d%d",&n,&l) && n && l){        cnt=0;        mem(S,0);        solve(0);    }    return 0;}
原创粉丝点击