#P12646. 「OOI 2021 Day 2」插入文本

「OOI 2021 Day 2」插入文本

题目描述

阿里萨和安娅是文案工作者。最近她们接到一个订单:需要编写 kk 个关于相似主题的文本(字符串)。她们迅速开始工作,得到了 kk 个字符串 S1,,SkS_1, \dotsc, S_k,每个字符串的长度不超过 mm,且由小写拉丁字母组成,其中 S1S_1 的长度恰好为 mm

她们长期合作,有一个简单的方法来检查工作的原创性。原创性通过检查文本的子串来评估。阿里萨和安娅认为某个字符串是非原创的,如果它及其反转后的字符串在她们的文本中作为子串出现在相同的位置上。

为了加快检查速度,她们将字符串分割成块。分割成 tt 个块由序列 a0,a1,,ata_0, a_1, \dotsc, a_t 定义,其中 a0=0a_0 = 0at=ma_t = m,且对于任意 1it1 \leq i \leq tai1<aia_{i-1} < a_i。第 ii 个块定义为整数区间 [ai1+1;ai][a_{i-1}+1; a_i]。块 [ai1+1;ai][a_{i-1}+1; a_i] 被称为有趣的,如果存在一个非原创字符串,恰好在该块定义的位置上出现在文本中。换句话说,块是有趣的,如果存在字符串 SlS_lSrS_r(可能 l=rl = r),使得 Sl,Srai|S_l|, |S_r| \geq a_i,且字符串 Sl,ai1+1Sl,ai1+2Sl,aiS_{l, a_{i-1}+1}S_{l, a_{i-1}+2}\dotsc S_{l, a_i} 与字符串 Sr,aiSr,ai1Sr,ai1+1S_{r, a_i}S_{r, a_i-1}\dotsc S_{r, a_{i-1}+1} 相同,其中 St,jS_{t,j} 是字符串 StS_t 的第 jj 个字符。

例如,对于文本 [abba,ba][\texttt{abba}, \texttt{ba}],序列 (0,1,4)(0,1,4)(0,1,2,3,4)(0,1,2,3,4) 定义了有效的分割,而 (1,2,3)(1,2,3)(0,1,1,4)(0,1,1,4) 则不是。对于分割 (0,2,4)(0,2,4),第一个块 [1;2][1;2] 是有趣的,因为 S1,1S1,2=S2,2S2,1=S_{1,1}S_{1,2}=S_{2,2}S_{2,1}= ab\texttt{ab},而第二个块 [3;4][3;4] 不是有趣的,因为对于唯一可能的对 l=r=1l = r = 1S1,3S1,4=baS_{1,3}S_{1,4}=\texttt{ba}S1,4S1,3=abS_{1,4}S_{1,3}=\texttt{ab} 不相同。

分割被称为有趣的,如果其中的每个块都是有趣的。阿里萨和安娅希望找到将文本分割成最少块的有趣分割,以衡量工作的原创性。她们努力使这个问题符合现代标准并通过贝克德尔测试,现在请帮助她们编写一个程序来衡量原创性!

请注意,目标值是明确定义的,因为将字符串分割成 mm 个长度为 11 的块总是能得到一个有趣的分割(每个块中可以选择 l=r=1l = r = 1)。

输入格式

第一行包含三个整数 t,k,mt, k, m (1k200000,1m500000)(1 \leq k \leq 200000, 1 \leq m \leq 500000),分别表示子任务编号、文本总数和第一个文本的长度。

接下来的 kk 行中,第 ii 行输入 SiS_i,即第 ii 个文本,由小写拉丁字母组成。

保证 S1=m|S_1|=m,对于任意 i>1i>1Sim|S_i| \leq m,且所有字符串的总长度不超过 500000500000

输出格式

第一行输出一个整数 tt,表示有趣分割中最少的块数。

第二行通过空格分隔输出 t1t-1 个递增的整数 a1,,at1a_1, \dotsc, a_{t-1},表示除最后一个块外的所有块的右边界编号(分割本身为 [1;a1],[a1+1;a2],,[at1+1;m][1;a_1], [a_1+1;a_2], \ldots ,[a_{t-1}+1;m])。

0 2 6
abcded
cba

2
3

0 6 7
poggers
sus
amogus
tokyo
ghoul
sodluv

4
3 5 6

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 子任务依赖 备注
11 77 k100k \leq 100m10m \leq 10L1000L \leq 1000 00
22 88 k20k \leq 20m100m \leq 100L2000L \leq 2000 00
33 1010 k200k \leq 200m200m \leq 200L40000L \leq 40000 020 \sim 2
44 1212 k200k \leq 200m2000m \leq 2000L400000L \leq 400000 030 \sim 3
55 99 保证答案中不超过两个块
66 1111 k=1k = 1m50000m \leq 50000L50000L \leq 50000
77 1111 k=1k = 1 66
88 1010 k=2k = 2
99 99 m200000m \leq 200000L200000L \leq 200000 03,60 \sim 3, 6
1010 1313 090 \sim 9