對於乙個給定長度為\(n\)的字串,求它的第\(k\)小子串,若\(t\)為\(0\)表示不同位置的相同子串算作乙個,否則算作多個,子串數目不足\(k\)個,則輸出\(-1\)。
\(n\le 5\cdot 10^5\)
建sam,按拓撲序動態規劃求出每個結點後有多少個子串,然後貪心求解即可。
#include#define rep(i,x,n) for(int i=x;i<=n;i++)
#define per(i,n,x) for(int i=n;i>=x;i--)
#define sz(a) int(a.size())
#define rson mid+1,r,p<<1|1
#define pii pair#define lson l,mid,p<<1
#define ll long long
#define pb push_back
#define mp make_pair
#define se second
#define fi first
using namespace std;
const double eps=1e-8;
const int mod=1e9+7;
const int n=2e6+10;
const int inf=1e9;
int n,t,k;
char s[n];
struct sam
void insert(int c)
}sz[np]=1;
}void init()
void gao()}}
void solve(int k)}}
puts("");
}}sam;
int main()
省選專練之後綴自動機 TJOI2015 弦論
這個看似模板,但是我還是沒有理解透徹,畢竟寫得慢還是主要比不過抄碼的人。但是在zjy鉅子本色出演的題目,我還是請教了zjy本人,我大抵是會了。這個本身有兩種情況 1 t 0求right集合 又叫endpos集合 2 t 1求siz集合 這個都好求 然後就是乙個類似於可持久化線段樹的查詢方式了 從小到...
3998 TJOI2015 弦論 字尾自動機
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 ...
HYSBZ 弦論(字尾自動機)
description 對於乙個給定長度為n的字串,求它的第k小子串是什麼。input 第一行是乙個僅由小寫英文本母構成的字串s 第二行為兩個整數t和k,t為0則表示不同位置的相同子串算作乙個。t 1則表示不同位置的相同子串算作多個。k的意義如題所述。output 輸出僅一行,為乙個數字串,為第k小...