Krydom: 暁の水平线に胜利を刻むのです

ソロモンの悪夢、見せてあげる!

@krydom1年前

03/18
19:19
manacher 一般动规与递推 字符串 贪心

神奇项链 [bzoj 3790]

00:00/00:00

♦♦♦♦♦♦   Description   ♦♦♦♦♦♦

母亲节就要到了,小 H 准备送给她一个特殊的项链。这个项链可以看作一个用小写字
母组成的字符串,每个小写字母表示一种颜色。为了制作这个项链,小 H 购买了两个机器。第一个机器可以生成所有形式的回文串,第二个机器可以把两个回文串连接起来,而且第二个机器还有一个特殊的性质:假如一个字符串的后缀和一个字符串的前缀是完全相同的,那么可以将这个重复部分重叠。例如:aba和aca连接起来,可以生成串abaaca或 abaca。现在给出目标项链的样式,询问你需要使用第二个机器多少次才能生成这个特殊的项链。

♦♦♦♦♦♦   Input   ♦♦♦♦♦♦

输入数据有多行,每行一个字符串,表示目标项链的样式。

♦♦♦♦♦♦   Output   ♦♦♦♦♦♦

多行,每行一个答案表示最少需要使用第二个机器的次数。

♦♦♦♦♦♦   Sample Input   ♦♦♦♦♦♦

abcdcba
abacada
abcdef

♦♦♦♦♦♦   Sample Output   ♦♦♦♦♦♦

0
2
5

♦♦♦♦♦♦   Hint   ♦♦♦♦♦♦

每个测试数据,输入不超过 5行
每行的字符串长度小于等于 50000

♦♦♦♦♦♦   题解  ♦♦♦♦♦♦

先用manacher求出每一个极大回文串,然后就把问题转变成了数轴上有一些线段询问最少用多少个线段可以覆盖整个数轴的问题,然后可以用dp或者贪心解决。

c++:

pascal:

 

神奇项链 [bzoj 3790]