字串最小表示 超時及優化

2021-10-02 03:44:07 字數 853 閱讀 9899

把乙個長為len的字串圍成乙個圈,然後以任意乙個字元作為起點,都會產生乙個長為len的字串,字串的最小表示就是所有字串中字典序最小的那個。

例如字串alabala,將它圍成乙個圈後,根據上面的規則會形成以下新的字串:

labalaa

abalaal

balaala

alaalab

laalaba

aalabal

在這所有7個字串中,字典序最小的是aalabal,它的第乙個字母在原字串中的位置是6。(位置從0開始算)

現在給定你乙個字串,請你找出其最小表示的第乙個字母在原字串中的位置。如果字串最小表示有多個,那麼輸出第乙個字母在原字串中位置最小的。

時間限制: 1 sec  記憶體限制: 32 mb

輸入的第一行是乙個整數t,表示有t組測試資料。

接下來t行,每行先輸入乙個整數l(5<=l<=100000),表示原字串的長度,然後輸入乙個字串,表示原字串。字串中只包含小寫字母。

對於每組輸入,輸出原字串最小表示的第乙個字母在原字串中的位置。

26 baabaa

7 alabala16

在輸入乙個字串之後,先找到該字串的最小字母,然後對於不是以最小字母開頭的字串省略對其判斷,然後**的執行時間就由原來的2976ms變成了700ms,優化結果並不理想但是ac是夠了的,今後若有更好的優化措施再來補充。

#includeusing namespace std;

int main()

for(j=1;jstr1)}}

printf("%d\n",minpos);

}return 0;

}

字串最小表示法

最小表示法的定義 給定乙個字串,不斷地把最後乙個元素移到最前面,可得有n個這樣的字串 稱這n個字串是迴圈同構的 那麼最小表示就是這n個裡面字典序最小的乙個 怎麼求最小表示 wrong 最樸素的方法,把每乙個這樣的字串求出來,然後一一比較,找到字典序最小的迴圈同構串 然後資料範圍變大肯定會超時 那麼正...

字串最小表示法

乙個長度為n的首尾相連的字串可以有n種表示法,例如串 abcd 還可以表示bcda,cdab,dabc當我們面臨這樣的字串的時候,我們很難統計相同字串的個數。因此我們引入一種字串的最小表示法來使這些串變得相同。字串的最小表示法是將原來的字串旋轉得到的字典序最小的串 設字串st的長度為len,我們可以...

模板 字串演算法 字串最小表示法

2014年10月,剛進hdu參加新生賽的時候,就遇到了字串最小表示法的裸題,然而那時什麼都不會的我只得寫暴力,自然tle了。之後在 湖南師範大學第六屆大學生計算機程式設計競賽2b 上,又做到了同樣的裸題。字串演算法 字串最小表示法模板 這是乙個可以用o n 時間解決 字串呈環狀,每一位置都可以作為首...