uva 129 困难的串

在枚举字串的过程中,用后缀来判断是否为困难的串,因为是从头开始枚举字串,所以对于新字串,只需要判断新加入的后缀造成的影响即可,由于此题只需枚举字串,回溯的过程在枚举时完成

#include <stdio.h>
int L, n, cnt = 0;
int S[100] = {0};
int dfs(int cur){
    if(cnt++ == n){
        for(int i = 0; i < cur; i++){
            printf("%c", 'A' + S[i]);
        }
        printf("\n");
        return 0;
    }
    for(int i = 0; i < L; i++){
        S[cur] = i;
        int ok = 1;
        for(int j = 1; j * 2 <= cur + 1; j++){      //判断是否有两个重复的子串
            int eq =  1;
            for(int k = 0; k < j; k++){
                if(S[cur - k] != S[cur - k - j]){
                    eq = 0;
                    break;
                }
            }
            if(eq){
                ok = 0;
                break;
            }
        }
        if(ok) if(!dfs(cur + 1)) return 0;
    }
    return 1;
}
int main(){
    scanf("%d%d", &n, &L);
    int ok = dfs(1);
 
    return 0;
}

 

posted @ 2020-10-05 14:37  徒手拆机甲  阅读(101)  评论(0)    收藏  举报