Hiho 120 字尾陣列一 重複旋律

2021-07-23 19:45:19 字數 947 閱讀 6436

找連續k個中的最小值的最大值;根據height陣列的性質,若 rank[j] < rank[k],則字尾 s

j..n

和 sk..n

的最長公共字首為 min。這個性質存在是因為我們對字尾按字典序排序。

所以連續k個的height最小值代表出現至少為k次的旋律,再在裡頭找最大值,代表找出現次數至少為k次的最長旋律

using system;

namespace hiho

//計數排序,把新的二元組排序。

static bool cmp(int f, int x, int y, int w)

//通過二元組兩個下標的比較,確定兩個子串是否相同

static void suffix(string str)

m = 127; rsort(); //一開始是以單個字元為單位,所以(m = 127)

for (int w = 1, p = 1, i; p < n; w += w, m = p)

//離散:把相等的字串的rank設為相同。

//lcp

int j, k = 0;

for (int i = 1; i <= n; height[rank[i++]] = k)

for (k = k != 0 ? k - 1 : k, j = sa[rank[i] - 1]; a[i + k] == a[j + k]; ++k) ;

//這個知道原理後就比較好理解程式

}static void main(string args)

array[i] = ch;

}suffix(new string(array));

int ans = int.minvalue;

for (int i = 1; i <= n; ++i)

console.writeline(ans);}}

}

字尾陣列一 重複旋律

我們知道乙個 旋律被表示為長度為 n 的數構成的數列。旋律是一段連續的數列,相似的旋律在原數列可重疊。比如在1 2 3 2 3 2 1 中 2 3 2 出現了兩次。怎麼知道一段旋律中出現次數至少為k次的旋律最長是多少?輸入第一行兩個整數 n和k。1 n 20000 1 k n 接下來有 n 個整數,...

Hiho 123 字尾陣列四 重複旋律4

首先列舉 k,l 中的這個l,再列舉起始位置i,計算suffix i 和suffix i l 的lcp,記作lcp l,i 那麼k l,i 就等於lcp l,i l 1。對於所有的迴圈節長度l和起始位置i,最大的k l,i 就是答案。using system namespace hiho stati...

找出陣列中唯一重複的數

題目 陣列a n 1至n 1這n 1個數存放在a n 中,其中某個數重複一次。寫乙個函式,找出被重複的數字。方法一 異或法。陣列a n 中的n個數異或結果與1至n 1異或的結果再做異或,得到的值即為所求。include include include include void xor finddup...