廣西大學東信杯 F 金手指

2022-10-08 21:00:15 字數 984 閱讀 8304

最小字串

最小字典序的實現-----模式化

並且,對於string來說 可以直接進行< > =比較特別好用 拼接用+也方便!

關於k取值範圍的問題:k<=n 最後乙個位置,這裡還有乙個關鍵點,string分配是動態分配,所以即使是取到n的位置,也不會顯示溢位。

當輸入字元為aaaaaa時,此重複字串,執行一次便跳出迴圈,此時k=n-1.

string minstring(string s)else

}else if(s[p1+k]s[p1+k])

if(p0+k+1<=p1) p0=p1+1;

else p0=p0+k+1;

else if(s[p0+k]kmp----字串模式匹配演算法----關鍵字搜尋

演算法思想:模式串向右移動與主串進行比對,發現不同,為了節省時間,不直接將將模式串往後移乙個位置,而是移動到在已匹配的字元中某個重複的最大字串位置

公式:t[i-ki-1]==p[0k-1]

遺留問題:取後面加前面為什麼過不了 網上用的是兩倍原字串然後尋找關鍵字

巧妙:先找到每個位置的next(最大重複字串指標的位置 便於副串的回溯)

有動態的思想了,順著思路,若當前位置匹配,當然要匹配下乙個位置了,下乙個位置匹配,那麼下乙個位置的next應該和這個位置的next相同,若不匹配,就是目前的位置。若當前位置不匹配,那就從當前位置的上乙個位置開始吧(上乙個位置可能會經歷過好幾次不匹配,然後回到最初的起點。)。而k=-1就是為了如果回到最初開始服務的,並且最初的當前位置即j的next已經被賦值過了!可以看next[0]=-1。

這裡k還有個很關鍵的點,在needle中表示的是位置資訊,而賦值給next後表示的是與當前比較的j相同的位置的後乙個位置!(即不匹配的第乙個位置)

void getnext(string needle,int *next)

「東信杯」廣西大學第一屆程式設計競賽(同步賽)

不吉利的數 時間限制 c c 2秒,其他語言4秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 在數學中,某個序列的子串行是從最初序列通過去除某些元素但不破壞餘下元素的相對位置 在前或在後 而形成的新序列。假設有一條數列 注意 子數列的次序必須和主...

PTA 廣西科技大學 胡偉平老師出的題目

輸入格式 在一行中輸入三個資料,分別是感染人數n,天數t,傳播係數ro。輸出格式 對每一組輸入,在第t天的感染人數,輸出。如果感染人數達到或者超過了人數 3.3億 那就輸出 maga?bazinga 輸入樣例 在這裡給出一組輸入。例如 100 15 1.2 輸出樣例 在這裡給出相應的輸出。例如 如下...