2023年10月,剛進hdu參加新生賽的時候,就遇到了字串最小表示法的裸題,然而那時什麼都不會的我只得寫暴力,自然tle了。之後在
湖南師範大學第六屆大學生計算機程式設計競賽2b
上,又做到了同樣的裸題。
/*
字串演算法-字串最小表示法模板
這是乙個可以用o(n)時間解決"字串呈環狀,每一位置都可以作為首位,找出以哪個位置為開頭,可以使得這個字串的字典序最小(或最大)"問題的演算法。
*/#include#includeconst int m=5e6+10;
int casenum,casei;
int p;
char a[m];
int getmin(char s)
}return i0)i+=k+1;
else j+=k+1;
為什麼這裡是變成k+1,中間的內容可以完全跳過呢?(比如t>0)
因為我們已經有
【時間複雜度&&優化】
i,j,k在某個位點都最多從0走到len,所以時間複雜度為o(n)
【trick】
【資料】
sample input
4bcda
aaaa
adab
sample output30
02*/
ps:這套題雖然質量不高,還有兩道錯題2333,但是有三道裸題(2b字串最小表示法、3c網路流和6f矩陣快速冪),對這些演算法生疏的acmer,可以拿來練手哦~~
字串最小表示法 O(n 演算法
網上看了這篇文章後還是感覺有些地方講的沒有詳細的證明所以新增了一點 紅色字是博主寫的 求字串的迴圈最小表示 上面說的兩個字串同構的,並沒有直接先求出min s 而是通過指標移動,當某次匹配串長時,那個位置就是min s 而這裡的問題就是 不是給定兩個串,而是給出乙個串,求它的min s eg min...
字串最小表示法
最小表示法的定義 給定乙個字串,不斷地把最後乙個元素移到最前面,可得有n個這樣的字串 稱這n個字串是迴圈同構的 那麼最小表示就是這n個裡面字典序最小的乙個 怎麼求最小表示 wrong 最樸素的方法,把每乙個這樣的字串求出來,然後一一比較,找到字典序最小的迴圈同構串 然後資料範圍變大肯定會超時 那麼正...
字串最小表示法
乙個長度為n的首尾相連的字串可以有n種表示法,例如串 abcd 還可以表示bcda,cdab,dabc當我們面臨這樣的字串的時候,我們很難統計相同字串的個數。因此我們引入一種字串的最小表示法來使這些串變得相同。字串的最小表示法是將原來的字串旋轉得到的字典序最小的串 設字串st的長度為len,我們可以...