uva 129 困難的串

2021-07-05 03:48:02 字數 857 閱讀 6554

先想出最簡單的解法:列舉字母串(書中所介紹的遞迴排列列舉演算法),每次產生乙個新串都進行檢查。檢查是否「困難」的方法是:外層迴圈列舉子串長度;中層迴圈列舉左側子串的起始位置;內層迴圈列舉子串中的字元的位置直覺上來說,這個方法就太笨重了。實際上這個方法進行了很多重複的工作:每次在原有字母串基礎上增加一位字母新產生的字母串中,只有最後一位字母是新增的,如果將這一位字母去掉,則前面的字母串已經是「困難」的了。因此上面的方法中,中層迴圈可以去掉,然後將列舉方向改為從後向前。這樣就可以避免重複檢查相同的字母串乙個細節需要注意:因為本題不需要輸出多個解,而是找到目標後即可輸出,所以dfs時如果找到了解,應該立刻返回上層

//  created by chenhongwei in 2015.

#include"iostream"

#include"cstdio"

#include"cstdlib"

#include"cstring"

#include"climits"

#include"queue"

#include"cmath"

#include"map"

#include"set"

#include"stack"

#include"vector"

#include"sstream"

#include"algorithm"

using namespace std;

typedef long long ll;

int n,m;

int flag,cnt;

int a[1000];

void slove(int p)

return 0;

}

uva 129 困難的串

題目大意 如果乙個字串包含兩個相鄰的重複子串,則稱它是 容易的串 其他串稱為 困難的串 列如,bb,abcdacabcab,abcdabcd都是容易的串,而d,dc,abdab都是困難的串 輸入正整數n和l,輸出由前l個字元組成的,字典序第n小的困難的串 include include includ...

UVa129 困難的串

輸入依舊是坑。include include include include includeusing namespace std int n,l int cnt int s 100 int dfs int cur 表示排到第cur個字元 printf c a s i printf n d n cu...

UVA 129 困難的串

include include include using namespace std int cnt 0 代表字典序號 int l,n 定義構造困難的串所需要的前l個字元以及字典序的編號 char string 81 定義儲存字串的字元陣列 int dfs int cur 代表構造困難的串所需要的...