題目:
如果一個字符串包含兩個相鄰的重複子串,則稱他們是“容易的串”,其他串稱爲“困難的串”。例如,BB ABCDABCD AABCCCBC都是容易的,而 A ABC ABCA都是困難的。
輸入正整數k和L,輸出由前L個字符組成的、字典序第k小的困難的串。輸入保證答案不超過80個字符。
樣例輸入
7 3
樣例輸出
ABACABA
代碼如下
#include <iostream>
using namespace std;
int cnt = 0;
int k,L;
int s[80];
int dfs(int cur)
{
if( cnt == k )
{
for (int i = 0; i <cur; i ++)
cout << char('A'+s[i]);
cout << endl;
return 0;
}
else cnt ++;
for (int i = 0; i < L; i ++)
{
s[cur] = i;
int ok = 1;
for (int j = 1; j*2 <=cur+1; j ++ )
{
int equal = 1;
for (int p = 0; p < j; p ++ )
if ( s[cur-p] != s[cur-p-j] )
{ equal = 0; break; }
if (equal) {ok = 0; break;}
}
if (ok) if (!dfs(cur+1)) return 0;
}
return 1;
}
int main()
{
memset(s,0,sizeof(s)/sizeof(int));
cin >> k >> L;
dfs(0);
}