謎一樣的最小表示法

2021-08-01 03:28:02 字數 825 閱讀 7131

今天做題有一題用瞎搞做。。發現做不了,看了下標算 最小表示法,就學了下,覺得這個好玄啊

最小表示法的用處是這樣的

比如對於字串bacda 他的迴圈同構字串分別有

bacda

acdab

cdaba

dabac

abacd

顯然,最後乙個的字典序最小,最小表示法就是要找到這個開頭的位置,在這個例子中即是 4->』a』

個人理解,這是類似於排除法的做法。

首先我們認為所有的位置都是有可能的 接下來開始排除

乙個顯然的性質是 例如說在 bababbabaa中,0~3是不可能成為最小字典序字串的開頭的,因為」babab」和」babaa」相比,不論怎麼取,在後面的字串中都可以找到更優的解。

利用這一性質,我們可以線性的推過去,從而找到最優解

於是我們構造x,y兩個指標,表示兩個可能存在答案的位置。

為了讓x!=y,初始x=0,y=1

之後往後推,列舉乙個k,找到第乙個x+k!=y+k,這個k顯然可以等於0嘛。

然後我們判斷x+k和y+k,哪個大,顯然,大的那乙個所在的區間內全部不可能是最優解,全部排除。

當k>s.length()或x或y>s.length()時,顯然有乙個區間全部排除,則答案就是x,y中的最小值

對了,乙個比較方便的寫法, 因為是迴圈同構,所以我們可以把原來的字串複製一遍,這樣就很方便了。

本人的寫法可能有些問題,求大神指出

int min(string s, int l)  

return

min(x,y);

}

謎一樣的牛 樹狀陣列

有n頭奶牛,已知它們的身高為 1 n 且各不相同,但不知道每頭奶牛的具體身高。現在這n頭奶牛站成一列,已知第i頭牛前面有ai頭牛比它低,求每頭奶牛的身高。輸入格式 第1行 輸入整數n。第2 n行 每行輸入乙個整數ai,第i行表示第i頭牛前面有ai頭牛比它低。注意 因為第1頭牛前面沒有牛,所以並沒有將...

謎一樣的牛 樹狀陣列

有n頭奶牛,已知它們的身高為 1 n 且各不相同,但不知道每頭奶牛的具體身高。現在這n頭奶牛站成一列,已知第i頭牛前面有ai頭牛比它低,求每頭奶牛的身高。輸入格式 第1行 輸入整數n。第2 n行 每行輸入乙個整數ai,第i行表示第i頭牛前面有ai頭牛比它低。注意 因為第1頭牛前面沒有牛,所以並沒有將...

244 謎一樣的牛(樹狀陣列)

有n頭奶牛,已知它們的身高為 1 n 且各不相同,但不知道每頭奶牛的具體身高。現在這n頭奶牛站成一列,已知第i頭牛前面有ai 頭牛比它低,求每頭奶牛的身高。輸入格式 第1行 輸入整數n。第2 n行 每行輸入乙個整數ai 第i行表示第i頭牛前面有ai 頭牛比它低。注意 因為第1頭牛前面沒有牛,所以並沒...