題意:
給你乙個字串的環,求從那個位置起字串的字典序最小。
題解:最小表示法。
**鏈結
view code
1 #include 2 #include 3 #include 4 #include 5 #include 6其實更容易想到的是字尾自動機。。7#define n 202008//
求最小迴圈同構串起點
9using
namespace
std;
1011
char
str[n];
12int
len;
1314 inline int
go()
1529}30
31int
main()
32
我會告訴你這個是字尾自動機的例題?
將原串擴充成原來的二倍,構建字尾自動機,然後將原串在字尾自動機上匹配,即可。
需要在字尾自動機上每個節點搞乙個s值表示這個節點所表示的串在擴充後的串中的位置。
view code
1 #include 2 #include 3 #include 4 #include 5 #include 67#define n 20010 89
using
namespace
std;
1011
struct
sam12
sam[n],*head,*last;
1617
char
str[n];
18int
cnt,len;
1920 inline void add(int
x)2135}
3637 inline void
read()
3846
47 inline void
go()
4853 printf("
%d\n
",last->s-len+1
);54}55
56int
main()
57
POJ 1509 字尾陣列
點選開啟鏈結 題意 給個串問最小的字尾,但是這個串是個環 思路 是個環也好處理,那麼就將串複製一遍加到後面就行了,然後求出字尾陣列和高度陣列,剛開始我寫的是就求出字尾陣列sa,然後從排名第1開始找,比如找到了i,排名為i的從第sa i 開始,那麼如果這個值小於輸入串的長度,直接輸出就行,提交wa,看...
字尾自動機poj1509
今天終於知道什麼是字尾自動機了,知道他長啥樣了,知道他的幾個性質了,但是構造的過程還沒太明白,對於用節點維護某些東西肯定還不行,先敲一道水題,算整理一下模板 poj1509有最小表示法的演算法,這裡中字尾自動機求解。思路 把串重複一邊加到後面,然後構造字尾自動機,然後從根遍歷字串長度,得到位置 in...
poj1509(字尾自動機)
其實這個題也可以用最小表示法 但是還是練了練字尾自動機 明白了建構函式就是構造原串 整個串 的以最後乙個字元為止的所有字尾都加上乙個字元產生新串的字尾 這個題目就是找這個字串迴圈中的最小表示 直接兩個原串一拼接 所有的迴圈都是拼接後長串的字尾 找到長度為len的最小字尾即可 include incl...