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