困難的串
題意:如果乙個字串包含兩個相鄰的重複子串,則稱它是「容易的串」,其他串稱為「困難的串」。例如, bb、abcdabcd都是容易的串,而d、dc、abdad、cbabcba都是困難的串。
輸入正整數n和l,輸出由前l個字元組成的、字典序第k個困難的串。例如,當l=3時,前7個困難的串 分別為a、ab、aba、abac、abaca、abacab、abacaba。輸入保證答案不超過80個字元。
樣例輸入:
7 3
30 3
樣例輸出:
abacaba
abacabcacbabcabacabcacbacaba
思路:構建乙個字串a,往其中不斷增加滿足條件的字元,直至字串大小為n,即為所求字串;
假設當前串長度為cur,則字串a[cur-1]的所有子串都是困難的,所以只需判斷字串a[cur]是否困難即可;
**:
1 #include 2#define maxn 100
3using
namespace
std;45
int a[maxn], n, l, cnt=0;6
7int dfs(int
cur)
815 printf("\n"
);16
return0;
17}18for(int i=0; i)
1931}32
if(k==j) //
***如果k=j,即其為容易的串
3337}38
if(flag) //
***如果當前串為困難的串,並且cnt!=n,繼續遞迴,如果cnt=n,遞迴結束,直接退出
3944}45
}46return1;
47}4849
int main(void)50
困難的串問題
題目描述 如果乙個字串中存在相鄰的重複子串,則稱為容易的串,反之稱為困難的串。輸入正整數n和l,輸出由前l個大寫字母組成的,字典序第n小的困難的串。l不大於5,n不大於20。輸入在一行輸入n和l的值,遇到檔案末尾結束。輸出在一行輸出字典序第n小的困難的串。樣例輸入 7 3樣例輸出 abacaba i...
困難的串問題
問題描述 如果乙個子婦產包含兩個相鄰的重複子串,則稱它是 容易的串 其他的串稱為 困難的串 例如,bb abcdacabcab abcdabcd都是容易的,而d dc abdab cbabca都是困難的。輸入乙個正整數n和l,輸出由前l個字元組成的 字典序第n小的困難的串。解這個問題我用的是dfs,...
困難的串 回溯法
題目 如果乙個字串包含兩個相鄰的重複字串,則稱它是 容易的串 其他串稱為 困難的串 輸入正整數n和l,輸出由前l個字元組成的 字典序第n的困難的串。例如,當l 3時,前7個困難的串分別是a ab aba abac abaca abacab abacaba。輸入保證答案不超過80個字元。解題思路 從左...