#tRIEybttg020307. 1477:【SCOI2016】背单词

1477:【SCOI2016】背单词

好的,我将题目中的数字和名称用 ...... 标出。


题目描述

Lweb 面对 nn 个英语单词,他想按某种顺序把它们填入计划表(一个 11nn 的排列)。
对于某个单词 xx(假设它被填入的位置编号是 posxpos_x,并且 1posx11 \dots pos_x-1 的位置已经被填入单词):

  1. 如果存在一个单词是它的后缀,并且那个单词当前还没有被填入表内(即还在后面),那么他需要吃 n×nn \times n 颗泡椒才能学会这个单词。
    (这一情况要尽量避免,因为代价太大)

  2. 当它的所有后缀都已经被填入表内时:

    • 如果 1posx11 \dots pos_x-1 的位置上的单词都不是它的后缀,那么他吃 posxpos_x 颗泡椒就能记住它。
    • 如果 1posx11 \dots pos_x-1 的位置上存在是它后缀的单词,取其中序号最大的为 yy,那么他只要吃 posxypos_x - y 颗泡椒就能记住它。

目标是找到一种填入单词的顺序,使得总共吃的泡椒数最少。
注意:单词两两不同,单词由小写字母组成。


输入格式

第一行一个整数 nn,表示单词数。
接下来 nn 行,每行一个单词(小写字母组成,保证任意两个单词不同)。

输出格式

输出一个整数,表示 Lweb 吃的最少泡椒数。


数据范围

  • 1n1000001 \le n \le 100000
  • 所有单词总长度 1len5100001 \le \sum |len| \le 510000

输入样例

2
a
ba

输出样例

2

样例解释

单词:aa, baba

注意 aababa 的后缀。

如果先填 aa(位置 11),再填 baba(位置 22):

  • aa 没有后缀已被填入 → 情况 2 第一类:吃 11 颗泡椒。
  • baba 的后缀 aa 已填入(位置 11)→ 情况 2 第二类:y=1y = 1, posx=2pos_x = 2,吃 21=12 - 1 = 1 颗泡椒。
    总泡椒 1+1=21 + 1 = 2

如果先填 baba(位置 11),再填 aa(位置 22):

  • baba 没有后缀已被填入 → 情况 2 第一类:吃 11 颗泡椒。
  • aa 有后缀(baba)还没填入?错,aa 的后缀是空串还是 aa 本身?这里是 baba 的后缀是 aa,而 aa 的后缀是空串,所以 aa 的后缀都已填入(空串已经“被填入”,视为满足条件吗?题目说的后缀是单词,空串不是单词)。再仔细:对 aa 来说,它的后缀是空串(不算单词)和 aa 本身(但自身不算后缀吗?题目中的“后缀”指的是其他单词是自己的后缀)。这里 aababa 的后缀,但 aa 没有后缀是其他单词,所以 aa 的所有后缀都已填入(其实没有后缀单词)。
    那么 aa 符合情况 2 第一类?因为 111 \dots 1 只有 baba,而 baba 不是 aa 的后缀。所以吃 posa=2pos_a = 2 颗泡椒。
    总泡椒 1+2=31 + 2 = 3,比第一种方案差。

所以最少 22


这样题目就完整了,所有数字和名称都用 ...... 标出。