TJOI2015 弦論(第k小子串)

2022-06-20 14:09:12 字數 906 閱讀 9567

題意:

對於乙個給定的長度為n的字串,求出它的第k小子串。

有引數t,t為0則表示不同位置的相同子串算作乙個,t為1則表示不同位置的相同子串算作多個。

題解:首先,因為t的原因,字尾陣列較難實現,這裡不討論。

使用字尾自動機:

因為,這裡需要按字典序考慮子串,所以要使用trs指標。

首先,計算出每個子串的貢獻:t=0則為1,t=1則為出現次數。

然後,通過記搜算出匹配到每個點之後可以形成多少貢獻。因為使用trs,無需考慮壓縮。

最後,在每個節點處找到唯一乙個應當向下計算的點,迴圈直到找到解。

**:

#include #define ll long long

int trs[1000010][26],fa[1000010],len[1000010],sl=1,la=1;

int su[1000010];ll dp[1000010];

void insert(int c)

if(p==0)

fa[np]=1;

else

}} su[la]=1;

}int fr[1000010],ne[1000010],v[1000010],bs=0;

void addb(int a,int b)

void build()

void dfs0(int u)

}void dfs1(int u)

}void dfs2(int u) }}

char zf[500010];

int main()

int i;

for(i=0;i<26;i++)

printf("%c",i+'a');

u=trs[u][i];

} return 0;

}

P3975 TJOI2015 弦論 第K小子串

為了提高智商,zjy開始學習弦論。這一天,她在 string theory 中看到了這樣一道問題 對於乙個給定的長度為n的字串,求出它的第k小子串是什麼。你能幫幫她嗎?第一行是乙個僅由小寫英文本母構成的字串s 第二行為兩個整數t和k,t為0則表示不同位置的相同子串算作乙個,t為1則表示不同位置的相同...

TJOI2015 弦論 字尾自動機求第k小串

對於乙個給定長度為 n 的字串,求它的第 k 小子串,若 t 為 0 表示不同位置的相同子串算作乙個,否則算作多個,子串數目不足 k 個,則輸出 1 n le 5 cdot 10 5 建sam,按拓撲序動態規劃求出每個結點後有多少個子串,然後貪心求解即可。include define rep i,x...

省選專練之後綴自動機 TJOI2015 弦論

這個看似模板,但是我還是沒有理解透徹,畢竟寫得慢還是主要比不過抄碼的人。但是在zjy鉅子本色出演的題目,我還是請教了zjy本人,我大抵是會了。這個本身有兩種情況 1 t 0求right集合 又叫endpos集合 2 t 1求siz集合 這個都好求 然後就是乙個類似於可持久化線段樹的查詢方式了 從小到...