KMP 字串 BZOJ4974字串大師

2021-08-29 16:22:42 字數 777 閱讀 5722

在kmp演算法中,fai

lfail

fail

指標有乙個特殊的性質,i−f

aili

i-fail_i

i−fail

i​是前i個字元的最小迴圈節大小。

所以這題相當於就是說,給了你每個點的fail指標,求乙個滿足的字串。

那麼按照建fail指標的方式倒過來做就好了

#include

#include

#include

#include

#include

#define sf scanf

#define pf printf

#define maxn 100010

using

namespace std;

vector<

int> a[maxn]

;int n;

int fail[maxn]

;int used[maxn]

;char s[maxn]

;map<

int,

int> mp;

intmain()

for(

int i=

0;i) used[i]

=(used[fail[i]]|

(1<<

(s[i]

-'a'))

);//pf("\n",used[i],fail[i]);}pf

("%s"

,s);

}

BZOJ4974 字串大師

不難發現結論pe ri i nex ti,nex t 就是kmp裡的失配陣列。考慮構造乙個字串 s 滿足上述ne xt陣列,定義 i 的失配集為 n exti 1 1 的失配集。若ne xti 0 則si sne xti 若ne xti 0 則 i 必須和其失配集中的字元互不相同,因為字典序要最小,...

4974 字串大師

description 乙個串t是s的迴圈節,當且僅當存在正整數k,使得s是t k 即t重複k次 的字首,比如abcd是abcdabcdab的迴圈節 給定乙個長度為n的僅由小寫字元構成的字串s,請對於每個k 1 k n 求出s長度為k的字首的最短迴圈節的 長度per i。字串大師小q覺得這個問題過於...

BZOJ4947 字串大師 KMP

time limit 1 sec memory limit 256 mb submit 739 solved 358 submit status discuss 乙個串t是s的迴圈節,當且僅當存在正整數k,使得s是t k 即t重複k次 的字首,比如abcd是abcdabcdab的迴圈節 給定乙個長度...