字尾自動機poj1509

2021-06-27 22:47:00 字數 972 閱讀 9970

今天終於知道什麼是字尾自動機了,知道他長啥樣了,知道他的幾個性質了,但是構造的過程還沒太明白,對於用節點維護某些東西肯定還不行,先敲一道水題,算整理一下模板

poj1509有最小表示法的演算法,這裡中字尾自動機求解。

思路:把串重複一邊加到後面,然後構造字尾自動機,然後從根遍歷字串長度,得到位置

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn=10010;

const int sigma_size=26;

struct sam_node

sam_node(int ilen)

};sam_node node[maxn<<2],*root,*last;

int sam_size;

sam_node *newsam_node(int len)

sam_node *newsam_node(sam_node *p)

void sam_init()

void sam_add(int x,int len)

if(!p)

sam_node *q=p->next[x];

if(q->len==p->len+1)

sam_node *nq=newsam_node(q);

nq->len=p->len+1;

q->par=nq;

np->par=nq;

while(p&&p->next[x]==q)

}void sam_build(char *s)

}printf("%d\n",p->len-len+1);

}return 0;

}

poj1509(字尾自動機)

其實這個題也可以用最小表示法 但是還是練了練字尾自動機 明白了建構函式就是構造原串 整個串 的以最後乙個字元為止的所有字尾都加上乙個字元產生新串的字尾 這個題目就是找這個字串迴圈中的最小表示 直接兩個原串一拼接 所有的迴圈都是拼接後長串的字尾 找到長度為len的最小字尾即可 include incl...

POJ 1509 最小表示法 字尾自動機

題意 給你乙個字串的環,求從那個位置起字串的字典序最小。題解 最小表示法。鏈結 view code 1 include 2 include 3 include 4 include 5 include 6 7 define n 202008 求最小迴圈同構串起點 9using namespace st...

POJ 1509 字尾陣列

點選開啟鏈結 題意 給個串問最小的字尾,但是這個串是個環 思路 是個環也好處理,那麼就將串複製一遍加到後面就行了,然後求出字尾陣列和高度陣列,剛開始我寫的是就求出字尾陣列sa,然後從排名第1開始找,比如找到了i,排名為i的從第sa i 開始,那麼如果這個值小於輸入串的長度,直接輸出就行,提交wa,看...