BZOJ 2780 字尾自動機

2021-07-29 16:27:10 字數 863 閱讀 1831

由於是英文題,簡要解釋一下題目。

開始給出n個子串,和m個詢問,對於每個詢問讀入乙個子串,詢問n個子串中,有多少個子串包含所詢問的子串。

實在看不懂的可以從樣例中意會一下。

#include 

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn =505000;

int n,m,cnt,tot,len,ans[maxn];

char s[maxn];

vector

f[maxn];

set t[maxn];

set :: iterator it;

struct sam

void insert(int c,int id)} }

void dfs(int u)

sum[u]=t[u].size();

}void work()

for(int i=1;i<=cnt;i++) f[fa[i]].push_back(i);

dfs(1);

for(int i=1;i<=m;i++)

p=a[p][c];

}if(flag) printf("%d\n",sum[p]);

else

puts("0");}}

}sam;

int main()

/*3 3

abcabcabc

aaaaafe

abc a

ca*/

bzoj3998 字尾自動機

對於乙個給定長度為n的字串,求它的第k小子串是什麼。第一行是乙個僅由小寫英文本母構成的字串s 第二行為兩個整數t和k,t為0則表示不同位置的相同子串算作乙個。t 1則表示不同位置的相同子串算作多個。k的意義如題所述。輸出僅一行,為乙個數字串,為第k小的子串。如果子串數目不足k個,則輸出 1 aabc...

BZOJ 4516 字尾自動機

題意 統計本質不同的子串數量。題解 模板題,字尾自動機。在每乙個節點處,統計一下他能代表多少個 以他為終點的串。然後動態建立sam,同時每加一次都輸出一次就行了。唯一的不同是,這個題是int,而不是傳統的字串,那麼把nxt陣列換成map,複雜度多乙個log sizeof nxt 實際上非常小。cod...

bzoj 3998 (字尾自動機)

給你乙個長度為 n 的字串 str 和乙個數 k 現在有兩個詢問 1.op 0 不同位置的相同子串算作乙個,求字典序第 k 小子串 2.op 1 不同位置的相同子串算作多個,求字典序第 k 小子串 因為字尾自動機能夠包含所有的子串,因此我們考慮在字尾自動機上貪心的跳轉。我們設字尾自動機上第 i 號結...