CF961F k-substrings
题目描述
给你一个由 $n$ 个小写拉丁字母组成的字符串 $s$。
我们定义 $s$ 的 $k$-子串为 $subs_{k} = s_{k} s_{k+1} \ldots s_{n+1-k}$。显然,$subs_{1}=s$,并且一共有 $n$ 个这样的子串。
我们称字符串 $t$ 是字符串 $T$ 的奇数长度真超级前后缀,若满足以下条件:
- $|T| > |t|$;
- $|t|$ 是奇数;
- $t$ 同时是 $T$ 的前缀和后缀。
对于 $s$ 的每一个 $k$-子串($1 \le k \le n$),你需要求出其奇数长度真超级前后缀的最大长度(若不存在这样的字符串,则输出 $-1$)。
输入格式
第一行包含一个整数 $n$ $(2 \le n \le 10^{6})$,表示字符串 $s$ 的长度。
第二行包含一个由 $n$ 个小写拉丁字母组成的字符串 $s$。
输出格式
输出 $n$ 个整数,第 $i$ 个数表示 $s$ 的第 $i$ 个子串的奇数长度真超级前后缀的最大长度(如果不存在这样的字符串,则输出 $-1$),数之间用空格隔开。
说明/提示
第一个样例测试的答案如下:
- 1-子串:bcabcabcabcabca
- 2-子串:cabcabcabcabc
- 3-子串:abcabcabcab
- 4-子串:bcabcabca
- 5-子串:cabcabc
- 6-子串:abcab
- 7-子串:bca
- 8-子串:c
由 ChatGPT 5 翻译