3998 TJOI2015 弦論 字尾自動機

2021-08-15 09:17:11 字數 1116 閱讀 4593

description

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

這道題感覺真的很入門啊……建出字尾自動機,對於t=

0 t=0

,預設所有節點的ri

ght rig

ht

集合為1,對於t=

1 t=1

,就直接正常求出ri

ght rig

ht

集合,然後對每個點求個su

m[x]

s um

[x

],表示

x x

節點開始有多少個子串,然後類似主席樹找第

k' role="presentation">k

k小那樣,dfs一次就行了。

#include

using

namespace

std;

#define ll long long

#define pa pair

const

int maxn=1000010;

const

int inf=2147483647;

int read()

while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();

return x*f;

}int last=1,tot=1;

int son[maxn][26],par[maxn],mx[maxn];

int sum[maxn],to[maxn],right[maxn],sum[maxn];

void extend(int x)

}last=np;

}char s[maxn];

int t,k,len;

void dfs(int now,int k)

else k-=sum[x];

}}int main()

else

}right[1]=0;

for(int i=tot;i;i--)

if(k>sum[1])return

puts("-1"),0;

dfs(1,k);

}

洛谷P3975 TJOI2015 弦論

題目大意 求乙個字串的第 k 大字串,t 表示長得一樣位置不同的字串是否算多個 題解 sam 先求出每個位置可以到達多少個字串 right 陣列 然後在轉移圖上 dp 若 t 1 初始值賦成 right 陣列大小,否則賦成 1 卡點 無 c code include include include ...

TJOI2015 弦論(第k小子串)

題意 對於乙個給定的長度為n的字串,求出它的第k小子串。有引數t,t為0則表示不同位置的相同子串算作乙個,t為1則表示不同位置的相同子串算作多個。題解 首先,因為t的原因,字尾陣列較難實現,這裡不討論。使用字尾自動機 因為,這裡需要按字典序考慮子串,所以要使用trs指標。首先,計算出每個子串的貢獻 ...

P3975 TJOI2015 弦論 第K小子串

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