bzoj3620似乎在夢中見過的樣子

2022-03-18 10:26:58 字數 718 閱讀 1997

bzoj3620似乎在夢中見過的樣子

題意:給出乙個字串,要求求出形如a+b+a的子串數量,且lena≥k,lenb≥1。字串長度≤15000,k≤100,所以字元長度為小寫字母。

題解:第一次寫kmp的題qaq~這題利用的是fail函式的性質:若字串s在位置x的fail函式f[x]不為0,則prefix(s+1,s+x)的長度為f[x]的字首和長度為f[x]的字尾相同。因此列舉每個字尾為為j,對這個字尾做kmp,再遞推乙個令f[i]-j+1≥k且最小的f[i]為last[x](f[i]表示i=x; while(i>=字尾位)i=f[i]得到的所有f[i]),若last[x]-j小於等於(x-j)/2則子串(j,x)合法。講的很亂,具體看**。

**:

1 #include 2 #include 3 #include 4 #include 5

#define inc(i,j,k) for(int i=j;i<=k;i++)

6#define inf 0x3fffffff

7using

namespace

std;89

char s[15100]; int l,k,next[15100],last[15100

],ans;

10int

main()22}

23}24 printf("

%d",ans); return0;

25 }

20160609

bzoj3620 似乎在夢中見過的樣子

亂點點到了這題。然後fyc巨巨說他以前用的是exkmp。於是我就學稍微學了一下。然後學著學著感覺沒什麼用 然後就放棄了。發現這題大家都是暴力 kmp 其實真的很暴力 你就列舉乙個左端點。然後對於這個左端點,我們對後面的字串跑一次kmp 然後呢,再列舉乙個右端點,判斷行不行。其實呢就還是按kmp的ne...

BZOJ3620 似乎在夢中見過的樣子

time limit 15 sec memory limit 128 mb submit 1361 solved 796 madoka,不要相信 qb!伴隨著 homura 的失望地喊叫,madoka 與 qb 簽訂了契約.這是 modoka 的乙個噩夢,也同時是上個輪迴中所發生的事.為了使這一次 ...

BZOJ 3620 似乎在夢中見過的樣子

bzoj 3620 似乎在夢中見過的樣子 kmp madoka,不要相信 qb!伴隨著 homura 的失望地喊叫,madoka 與 qb 簽訂了契約.這是 modoka 的乙個噩夢,也同時是上個輪迴中所發生的事.為了使這一次 madoka 不再與 qb簽訂契約,homura 決定在剛到學校的第一天...