#P2309. [Ctsc2011]字符串重排
[Ctsc2011]字符串重排
[CTSC2011] 字符串重排
题目描述
对于两个字符串 和 ,定义它们的最长公共前缀长度 为:
$$\operatorname{lcp}(A,B)=\max\{k\mid 0\le k\le \min(n,m),\ a_1a_2\cdots a_k=b_1b_2\cdots b_k\}.$$给定 个由小写英文字母组成的、两两不同的非空字符串 。
对于一个 到 的排列 ,定义其价值为
$$W(P)=\sum_{i=2}^{n}\left(\operatorname{lcp}(S_{p_{i-1}},S_{p_i})\right)^2.$$记所有排列中能够取得的最大价值为 。
此外,还有 个附加任务。对于第 个任务,给定两个不同的整数 。
对于一个满足 的排列 ,如果字符串 恰好排在字符串 的前一个位置,即
$$\operatorname{pos}_P(X_i)+1=\operatorname{pos}_P(Y_i),$$则称第 个任务被满足,并获得 的奖励。其中 表示编号为 的字符串在排列 中的位置。
一个排列的总任务奖励定义为它所满足的所有任务的奖励之和。
在所有满足 的排列中,考虑总任务奖励最大的排列。由于每个任务的奖励均为不同的 的幂,因此最大总任务奖励所对应的任务集合是唯一的。
请你求出:
- 最大价值 ;
- 最大总任务奖励所对应的所有被满足任务的编号。
输入格式
第一行包含两个整数 ,分别表示字符串数量和附加任务数量。
接下来 行,第 行包含一个字符串 。
接下来 行,第 行包含两个整数 ,表示第 个附加任务。
输出格式
输出三行。
第一行输出一个非负整数 。
第二行输出一个整数 ,表示最大总任务奖励方案中被满足的任务数量。
第三行输出 个整数,按照从小到大的顺序输出这些任务的编号,相邻编号之间用一个空格隔开。
如果 ,第三行输出一个空行。
样例 #1
样例输入 #1
4 6
a
b
abc
bc
1 2
1 3
3 1
4 2
2 4
2 4
样例输出 #1
2
4
1 3 5 6
样例说明
最大可能价值为 。
在所有价值等于 的排列中,可以取得的最大总任务奖励对应任务 。例如排列 可以同时满足这四个任务。
注意:题目不要求输出具体排列。
数据范围
- 对于 的数据,,,每个字符串长度不超过 ;
- 对于 的数据,,,每个字符串长度不超过 ;
- 对于 的数据,,每个字符串长度不超过 ;
- 对于 的数据,任意字符串都不是其他任何一个字符串的前缀;
- 对于 的数据,,,每个字符串长度不超过 ,所有字符串长度之和不超过 。
所有字符串均由小写英文字母组成且两两不同;每个任务中 。