困难的串
Sample Input
7 3
30 3
0 0
Sample Output
ABAC ABA
7
ABAC ABCA CBAB CABA CABC ACBA CABA
28
#include<iostream>
using namespace std;
int n,l,cnt;
int s[80];
int dfs(int cur){
int i,j,k,ok;
if(cnt == n){
int t = 0;
for(i = 0;i < cur; ++i){
if(t % 4 == 0 && t % 64 != 0)
printf(" ");
if(t % 64 == 0 && t)
printf("\n");
printf("%c",s[i] + 'A');
++t;
}
printf("\n%d\n",cur);
return 1;
}
else{
for(i = 0;i < l; ++i){
s[cur] = i;
ok = 1;
for(j = 1;j * 2 <= cur + 1; ++j){
for(k = 0;k < j; ++k){
if(s[cur - k] != s[cur - k - j])
break;
}
if(k == j){
ok = 0;
break;
}
}
if(ok){
cnt++;
if(dfs(cur + 1))
return 1;
}
}
return 0;
}
}
int main(){
//freopen("d://poj//data.txt","w",stdout);
while(scanf("%d%d",&n,&l) && n != 0){
cnt = 0;
dfs(0);
}
return 0;
}
核心是比较后缀是否有重复。