Not difficult, careful, first write the framework, gradually improve.
The code is as follows:
#include <iostream>
#include <cstdio>
using namespace std;
int n, L, ans[80], cnt(0), ove = false;;
bool isHard(int cur) {
int bor = (cur + 1) / 2;
Span class= "KWD" >for ( int i = 1 I != Bor + 1 ; ++ i ) {
bool ok = false;
for (int j = 0; j != i ; ++j) {
if (ans[cur - j] != ans[cur - i - j]) {
ok = true;
break;
}
}
if (!ok) return false;
if (i == bor && ok) return true;
}
}
void dfs(int cur) {
if (ove) return;
if (cnt == n) {
ove = true;
Span class= "KWD" >for ( int i = 0 I != cur + 1 ; ++ i ) {
Span class= "KWD" >if ( i && ! ( i % 4 ) && i != Span class= "lit" >64 ) printf ( span class= "str" "" " );
if (i == 64) printf("\n");
printf("%c", ans[i] + ‘A‘);
}
printf("\n%d\n", cur + 1);
} else {
Span class= "KWD" >for ( int i = 0 I != L ++ i ) {
ans[cur + 1] = i;
if (isHard(cur + 1)) {
++cnt;
dfs(cur + 1);
}
}
}
}
int main() {
Span class= "KWD" >while ( scanf Span class= "pun" > ( "%d%d" Span class= "pun" >& n & l ) == 2 && n ) {
ove = false;
cnt = 0;
for (int i = 0; i != L; ++i) {
ans[0] = i;
++cnt;
dfs(0);
}
}
return 0;
}
From for notes (Wiz)
UVa 129 Krypton Factor