kmp 似乎在夢中見過的樣子

2022-06-20 01:03:13 字數 1133 閱讀 9036

題目描述

「madoka,不要相信qb!」伴隨著homura的失望地喊叫,madoka與qb簽訂了契約。

這是modoka的乙個噩夢,也同時是上個輪迴中所發生的事。為了使這一次madoka不再與qb簽訂契約,homura決定在剛到學校的第一天就解決qb。然而,qb也是有許多替身的(但在第八話中的劇情顯示它也有可能是無限重生的),不過,意志堅定的homura是不會放棄的——她決定消滅所有可能是qb的東西。現在,她已感受到附近的狀態,並且把它轉化為乙個長度為n的字串交給了學oi的你。

現在你從她的話中知道,所有形似於a+b+a的字串都是qb或它的替身,且∣a∣≥k,∣b∣≥1(位置不同其他性質相同的子串算不同子串,位置相同但拆分不同的子串算同一子串),然後你必須盡快告訴homura這個答案——qb以及它的替身的數量。

注:對於乙個字串s,|s|表示s的長度。

輸入第一行乙個字串s,第二行乙個數k。

輸出僅一行乙個數ans,表示qb以及它的替身的數量。

aaaaa

1

樣例輸出
6
提示

對於全部資料,1≤∣s∣≤1.5×104,1≤k≤100,且字符集為所有小寫字母。

【題解】

就在參考部落格裡面了。

主要是自己不要意思把別人畫的圖複製過來。

列舉所有左端點然後進行向右看看有沒有乙個最長字首是符合要求的。

就是這麼乙個想法,但是細節稍微有點多。因為兩層for需要更細心。

【**】:

1 #include2 #include3 #include4

5using

namespace

std;

6const

int n = 1e5+10;7

8char

s[n];

9int

k,n,ans;

10int

next[n];

11int

main()

1228

29for(int i=l+1,j=l-1;i<=n;i++)

4142

}43 printf("

%d\n

",ans);

44return0;

45 }

view code

3620 似乎在夢中見過的樣子 Kmp 暴力

說白了其實就是暴力.暴力列舉左端點然後跑一邊kmp然後列舉右端點判斷 如果匹配的串超過了當前列舉的長度的一半就讓指標一直往前跑.然後統計答案 include include include include include include include include include include...

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 的乙個噩夢,也同時是上個輪迴中所發生的事.為了使這一次 ...