#P14376. [ICPC 2022 NAC] Cram

    ID: 13593 传统题 2000ms 1024MiB 尝试: 5 已通过: 1 难度: 7 上传者: 标签>CF2200字符串后缀数组动态规划单调栈线段树

[ICPC 2022 NAC] Cram

题目描述

你想使用反向引用对给定的文本段落进行压缩。一个 反向引用 是一对数 [a,b][a, b],表示字符串接下来的 bb 个字符与从当前位置向前数 aa 个字符开始的 bb 个字符相同。这两个字符串可以重叠,即 aa 可能小于 bb

每个反向引用的编码成本固定为 3 字节,无论它代表多少个字符。字符串中的每个字符的编码成本为 1 字节。

例如,字符串

abcabcabcabc\text{abcabcabcabc}

有 12 个字符。但最后 9 个字符可以表示为对前 9 个字符的反向引用,如下所示:

abc[3,9]\text{abc}[3,9]

该编码后的总成本为 6:字符串 abc 占 3 字节,反向引用占 3 字节。

请输出对该文本段落进行编码的最小成本。

输入格式

输入只有一行,包含一个字符串 ss,满足 1s1051 \le |s| \le 10^5。该行文本由大写字母('A'–'Z')、小写字母('a'–'z')和空格组成。行的开头和结尾不会有空格,且不会出现两个空格相邻的情况。测试数据为 CRLF 格式。

输出格式

输出一个整数,表示使用反向引用表示输入字符串的最小成本。

输入输出样例 #1

输入 #1

abcabcabcabc

输出 #1

6

输入输出样例 #2

输入 #2

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

输出 #2

4

输入输出样例 #3

输入 #3

A man a plan a canal Panama

输出 #3

25