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

2021-07-24 11:12:31 字數 1411 閱讀 8474

首先列舉(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

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

static void suffix()

m = 2000; rsort();

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

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]; original[i + k] == original[j + k]; ++k) ;

}static int lcp(int j, int k)

return (int)ask_min(rank[j] + 1, rank[k], 1);

}//線段樹

class tree

static tree tree = null;

//標記下放們 p == now

static long l(long x)

static long r(long x)

static void update(long p)

static void spread(long p)

static void build(long l, long r, long p)

long mid = (tree[p].l + tree[p].r) >> 1;

build(l, mid, l(p));

build(mid + 1, r, r(p));

update(p);

return;

}static long ask_min(long l, long r, long p)

spread(p);

long ans = int.maxvalue, mid = (tree[p].l + tree[p].r) >> 1;

if (l <= mid) ans = math.min(ans, ask_min(l, r, l(p)));

if (mid < r) ans = math.min(ans, ask_min(l, r, r(p)));

update(p);

return ans;

}static void main(string args)}}

console.writeline(ans);}}

}

字尾陣列四 重複旋律4

我們知道乙個 旋律被表示為長度為 n 的數構成的數列。我們把一段旋律稱為 k,l 重複的,如果它滿足由乙個長度為l的字串重複了k次組成。如旋律abaabaabaaba是 4,3 重複的,因為它由aba重複4次組成。小hi想知道一部作品中k最大的 k,l 重複旋律。輸入一行乙個僅包含小寫字母的字串。字...

hihocoder 字尾自動機四 重複旋律6

題目 對於 k in 1,n 求出長度為 k 的子串出現次數最多的出現了多少次 我直到現在才理解字尾自動機上的子樹和是什麼意思 非常顯然的一點是 endpos link u endpos u 考慮到 link u 有多個兒子 於是還需要 endpos 的另外乙個性質 endpos u endpos ...

hihocoder 字尾自動機四 重複旋律7

題目 在 dag 上跑乙個 dp 就好了 設 ans i 表示到了 sam 的 i 位置上所有的子串形成的數的和,之後我們順便記錄乙個方案數 d i 之後我們直接轉移就好了 ans v ans u times 10 w u,v times d u d v d u 答案是 sum ans i incl...