#L3740. 「LNOI2022」串
「LNOI2022」串
题目描述
为了让你更好地理解题面,给出若干关于字符串的定义:
- 对于一个字符串 ,定义其长度为 。
- 对于两个字符串 和 ,称 为 的子串,若 (即 为空串)或者 ,。
- 若 或上述判断条件中 可以取到 ,则称 为 的前缀;若 或上述判断条件中 可以取到 ,则称 为 的后缀。
给定一个英文小写字母构成的字符串 ,你需要找到一个尽可能长的字符串序列 ,满足:
- 是 的子串;
- ,;
- ,存在 的一个长度为 的子串 ,使得 的长度为 的前缀为 ,长度为 的后缀为 。
输出这样的字符串序列的长度的最大值(即 的最大值)。
输入格式
本题有多组测试数据。输入的第一行为一个整数 ,表示测试数据组数。对于每组测试数据,输入一行一个英文小写字母构成的字符串 。
输出格式
对于每组测试数据输出一行一个整数,表示题目描述中字符串序列长度的最大值。
样例 1
输入
3
abcd
abab
a
输出
2
3
0
下文中使用符号 表示空串。
- 对于第一组测试数据,可以找到如下字符串序列:$T_0 = \epsilon, T_1 = \texttt{b}, T_2 = \texttt{cd}$,其中 。
- 对于第二组测试数据,可以找到如下字符串序列:$T_0 = \epsilon, T_1 = \texttt{b}, T_2 = \texttt{ab}, T_3 = \texttt{bab}$,其中 $S'_1 = \texttt{ab}, S'_2 = \texttt{bab}, S'_3 = \texttt{abab}$。
- 对于第三组测试数据,可以找到如下字符串序列:。
样例 2
见附加文件中 string2.in
和 string2.ans
。
该组样例中的字符串长度有一定梯度,你可以利用该组样例对程序进行检查。
样例 3
见附加文件中 string3.in
和 string3.ans
。
该组样例满足特殊性质 A。
数据范围
设 表示测试点中所有测试数据的字符串长度和。
对于 的测试数据,,,。
| 测试点编号 | | | 特殊性质 | |:----------:|:---------:|:-----------:|:--------:| | 1 ~ 2 | 30 | 150 | 无 | | 3 ~ 5 | 200 | 800 | 无 | | 6 ~ 8 | 1000 | 3000 | 无 | | 9 ~ 11 | | | A | | 12 ~ 15 | | | 无 | | 16 ~ 20 | | | 无 |
特殊性质 A:字符串中的每个字符在小写字母中独立均匀随机生成。
提示
本题输入输出量较大,请使用较为快速的输入输出方式。
例如,若你的代码使用了 cin
和 cout
作为输入输出方式,你可以选择在代码的输入输出重定向语句(freopen
语句、fopen
语句等)之后加入以下语句加速输入输出速度。
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
加入该语句后不建议同时使用 cin
、cout
和其他输入输出方式。