#P14729. [ICPC 2022 Seoul R] Longest Substring

    ID: 14659 远端评测题 5000ms 2048MiB 尝试: 0 已通过: 0 难度: 8 上传者: 标签>2022后缀自动机 SAMICPC根号分治启发式合并首尔

[ICPC 2022 Seoul R] Longest Substring

Description

对于一个长度为 n1n \geq 1 的字符串 SS 和一个正整数 kk (1kn1 \leq k \leq n),SS 的一个非空子串被称为 kk-子串,如果该子串在 SS恰好出现 kk 次。这 kk 次出现不一定是互不重叠的,即可能重叠。例如,如果 S=ababaS = \text{ababa},则对于每个 k=1,...,5k = 1, ..., 5SSkk-子串如下:

  • SS 中有四个 1-子串:abab\text{abab}ababa\text{ababa}bab\text{bab}baba\text{baba},因为这些子串在 SS 中恰好出现一次。注意,aba\text{aba} 不是 1-子串,因为它出现了两次。
  • SS 中有四个 2-子串:ab\text{ab}aba\text{aba}b\text{b}ba\text{ba}。子串 ab\text{ab} 恰好不重叠地出现了两次。子串 aba\text{aba} 的两次出现在字符 a\text{a} 处重叠,但它的出现次数不超过两次。
  • SS 中只有一个 3-子串:a\text{a}
  • SS 中不存在 4-子串或 5-子串。

对于 SS 的一个 kk-子串 TT,令 d(T)d(T) 表示 TTSS 中互不重叠出现的最大次数。例如,一个 2-子串 T=abT = \text{ab} 可以不重叠地选择两次,即互不重叠出现的最大次数为 22,所以 d(T)=2d(T) = 2。对于一个 2-子串 T=abaT = \text{aba},它无法不重叠地选择两次,所以 d(T)=1d(T) = 1。对于一个 3-子串 T=aT = \text{a},它可以不重叠地选择三次,这是最大值,所以 d(T)=3d(T) = 3

f(k)f(k) 表示对于 1kn1 \leq k \leq n,在所有 kk-子串 TT 中,具有最大 d(T)d(T) 的那些子串中最长的长度。例如,对于 S=ababaS = \text{ababa}k=1,...,5k = 1, ..., 5f(k)f(k) 如下:

  • k=1k = 1 时,所有 1-子串 TT 只能不重叠地选择一次,因此 d(T)=1d(T) = 1。所以,在所有 d(T)=1d(T) = 1 的 1-子串中,最长的是 ababa\text{ababa},因此 f(1)=5f(1) = 5
  • k=2k = 2 时,对于 T=abaT = \text{aba}d(T)=1d(T) = 1,但对于其他 2-子串 T=abT = \text{ab}b\text{b}ba\text{ba}d(T)=2d(T) = 2。在 d(T)=2d(T) = 2 的 2-子串中,ab\text{ab}ba\text{ba} 是最长的,因此 f(2)=2f(2) = 2
  • k=3k = 3 时,因为只有一个 3-子串 a\text{a},所以 f(3)=1f(3) = 1
  • k=4,5k = 4, 5 时,不存在 kk-子串,因此 f(4)=0f(4) = 0f(5)=0f(5) = 0

给定一个长度为 nn 的字符串 SS,请编写一个程序,输出 f(k)f(k)k=1k = 1k=nk = nnn 个值。对于上面的例子,输出应为 5 2 1 0 05\ 2\ 1\ 0\ 0

Input Format

你的程序需要从标准输入读取数据。输入的第一行包含一个由 nn (1n50,0001 \leq n \leq 50,000) 个小写字母组成的字符串 SS

Output Format

你的程序需要向标准输出写入数据。输出恰好一行。该行应包含恰好 nn 个非负整数,用空格分隔,表示按顺序从 k=1k = 1k=nk = nf(k)f(k) 值,即 f(1) f(2) ... f(n)f(1)\ f(2)\ ...\ f(n)。注意,如果对于某个 kk 不存在 kk-子串,则 f(k)f(k) 应为 00

ababa
5 2 1 0 0
aaaaaaaa
8 7 6 5 4 3 2 1

Hint

翻译由 DeepSeek V3 完成