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; }

浙公网安备 33010602011771号