牛客 悠悠碧波 CF126B(kmp)

2021-10-07 22:41:28 字數 919 閱讀 1051

首先字首和字尾相等,聯想到kmp(kan mao pian)演算法:

該子串既是以len-1結尾的字尾,也是串中以某一第i位置結尾的字尾,也是整個串的字首。

(1)首先kmp演算法處理出[0,len]位置的next值。

對於[0,len-1]的next儲存的是失配的下一匹配位置;[1,len]可看作[0,len-1]中以各個位置為結尾的字串字首、字尾相等的子串長度。

(2)對於以len-1結尾的與字首相等的字尾子串長度,若在[1,len-2]位置中也有相同長度的next值 ,則都等於字首。因此在字首、串中和字尾都出現滿足條件。

故只要對k=next[len-1],若k長度未在[1,len-1]出現,則k=next[k];否則輸出當前長度的字尾子串滿足條件

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int maxn=

1e6+10;

int nxt[maxn]

;int cnt[maxn]

;void

getnext

(string &p)

else k=nxt[k];}

for(

int i=

1;i1;i++

) cnt[nxt[i]]++

;}void

solve

(string &s)

for(

int i=len-k-

1;i1;i++

) cout<; cout<}int

main()

牛客練習題 水 悠悠碧波

帕秋莉掌握了一種水屬性魔法 這種魔法可以淨化黑暗 帕秋莉發現對於乙個黑暗的咒語s,可以使用這個水元素魔法淨化它,淨化的咒語是乙個最長的字串t,t滿足以下條件 它是s的字首 它是s的字尾 除字首和字尾外,它還在s 現過至少一次 既然你都學會了,那麼淨化的工作就交給你了!輸入描述 一行字串 s 代表黑暗...

牛客 水 悠悠碧波(Next陣列 kmp小運用)

傳送門 題意 給乙個字串s求子串滿足 子串是s串的公共前字尾又在s串 現過 題解 先求出next陣列 得到最長公共前字尾,然後列舉公共前字尾,從大到小,看是否有滿足情況的,如果有,break然後輸出子串p ac include using namespace std const int maxn 1...

2019牛客第十場題解 C F

題意 第i天在原來字串的基礎上在字串的前面或者後面新增乙個字元。問新增完字元後有多少種不同長度的迴圈節。定義迴圈節為能把原字串分割成長度為k的乙個或多個部分。並且後面可以有或者沒有迴圈節的開頭部分。也就是說 s 1 s n x s x 1 s n 則說明迴圈節為x 1.明顯,對於長度為len的字串,...