由於是英文題,簡要解釋一下題目。
開始給出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 號結...