CSU 1800 小X的標題(KMP匹配)

2021-08-17 15:02:13 字數 1604 閱讀 6761

題目:

小x夢中得到乙個神秘字串,醒來後他趕快記了下來。

這個字串大概是一篇晦澀難懂的文章,姑且不用去管他的含義,小x想給它起乙個標題來表示這份天書。

但是小x是起名困難戶,於是他找到了小y和小z來一起商量。

小x覺得,標題是這個字串的開頭一段和結尾一段就行,簡單、直觀;而小y覺得,乙個好的標題應該還在文章中間的某乙個地方出現過,除了開頭和結尾部分;小z和小y的看法一樣,不過小z希望他自己在文章中找到的標題出現的位置和小y找到的位置不一樣。

如果有多個標題符合要求,他們一致同意採用最長的那個。

你知道他們最後採用了哪個嗎?

不超過20組資料。

對於每組資料,輸入一行乙個字串表示文章內容,字串只由小寫英文本母構成,每個字串長度不超過500000。

對於每組資料,輸出一行乙個字串表示最終選用的標題;如果找不到合適的標題,輸出一行乙個字串「cannot find it」。

aaa

aaaaa

abacadaeafa

fixprefixsuffixsowhatisfix

cannot find itaaa

fix

aa是aaaaa的字首以及字尾,另外,把字串從1到5標號,小y可以在位置2~3處找到乙個aa,而小z可以在另乙個位置3~4處找到乙個aa。

**:

#include

#include

#include

using

namespace std;

char c[

500005

];int nextt[

500005

];void

getnext

(char

*t,int m)

}int

main()}

else j = nextt[j];}if

(sum >=3)

break

; d = nextt[d];

while

(d>

0&& c[d]

!= c[l])d = nextt[d];}if

(sum >=3)

for(

int i =

1; i <= d; i++)

printf

("%c"

, c[i]);

else

printf

("cannot find it"

);printf("

\n");}

return0;

}

附上自己除錯時用的測試用例:aaa

aaaaba

ababab

abababa

abababab

abababcab

ababacbab

aaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaab

aaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaa

aaaabaaaabaaaabaaaa

aaaabaaaabaaaabaaaabaaaa

aaaabaaaabaaaabaa

CSU1973 給自己出題的小X

本題本意是搜尋題,直接小優化剪枝裸搜即可,然而可以dp,看了石文斌的題解,設f i j k 為前i個數,選出j個,相差大於k的方案數,先預處理 f i 1 k 1 f i j k f l j 1 k 之和 a i a l k,a陣列先預處理成從小到大排序的序列 序列順序不影響方案數的 然後統計f i...

設定X 軸的標題

chart1.chartareas chartarea1 axisx.title 季節 x軸標題 chart1.chartareas chartarea1 axisx.titlealignment stringalignment.far 設定y軸標題的名稱所在位置位遠 chart1.chartare...

小X的質數

題目描述 在小x的認知裡,質數是除了本身和1以外,沒有其他因數的數。但由於小x對質數的熱愛超乎尋常,所以小x同樣喜歡那些雖然不是質數,但卻是由兩個質數相乘得來的數。於是,我們定義乙個數小x喜歡的數,當且僅其是乙個質數或是兩個質數的乘積。輸入 第一行輸入個正整數q,表示詢問的組數。接下來q行,包含兩個...