選拔賽之 kmp

2021-07-30 08:55:02 字數 535 閱讀 9685

自己稀里糊塗就過了,,原來是資料水。。但也還是不知道自己的**其實能不能過,還是先放一下,,再看看能不能看得懂。。

id=97

對s串做個kmp得到fail陣列,答案就是:

n = s.length();

while(fail[n] != -1) ans.push_back(s.length() - fail[n]), n = fail[n];

證明:由fail[n]可知,s[i] = s[i+s.length()-fail[n]] ( 0 <= i < fail[n] )其實就是滿足了迴圈節為s.length()-fail[n]的定義。

很多人都是找了個迴圈串然後輸出了個等差數列,這都是錯的。比如下面的樣例:

ababbababbaba

45 10 12 13

int ans[n], cnt;

int main()

else j = f[j];

} cnt = 0;

i = n;

while(f[i] != -1)

cout<

選拔賽總結

時間限制 1 sec 記憶體限制 512 mb 提交 18 解決 9 提交 狀態 討論版 命題人 admin 題目描述 手機端qq推出了貼表情的新功能,復讀機勢力再次猖狂起來,她們把表情貼的到處都是!裙主決定把被復讀次數最多的表情從聊天記錄中刪去。聊天框是乙個大小為n x m的黑白點陣。背景色是白色...

選拔賽 旅遊

傳送門 首先有3種風景點,因此對應就有8種狀態 狀態表示的是到某個點經過的風景點有哪些 到每個點都有8種狀態,記錄狀態的話用的是dis陣列的第二維 將第二維j轉化為乙個二進位制數對應有3位,第一位表示的是a類風景點的狀態,第二位表示的是b類風景點的狀態,第三位表示的是c類風景點的狀態,對應的數字若是...

新生選拔賽(二)

思路 首先,我們分析題意可以發現,先將花瓣數列進行排序,如果兩端的花不能被消去,那麼,就肯定找不到唯一的一朵花,而且當n 1時肯定有唯一的花朵,當n不等於一時我們首先需要考慮花瓣中有無重複的數字,如果有重複的數字我們肯定要進行去重,因為只有資料中留有這個資料且能夠消去,那麼重複的花瓣都能消去,然後我...