Gravatar
rewine
积分:3053
提交:755 / 1597

Gravatar
_Itachi
积分:4324
提交:1498 / 3922
拿这道题来作为SA板子题,写了一遍又一遍

题目 2605 [HZOI 2016] 寒假ing
2017-02-12 18:59:08
Gravatar
ONCE AGAIN
积分:2733
提交:781 / 1622
回复 @Mike is Fool :
这个。。时间复杂度分析我真的不会,只是知道倍增的大常数以及COGS老爷机害了你、、、

题目 2605 [HZOI 2016] 寒假ing
2017-01-26 15:06:07
Gravatar
FoolMike
积分:5200
提交:1165 / 2240
回复 @ONCE AGAIN :
感谢神犇的指教,但是我这种做法复杂度也是正确的啊!

Gravatar
ONCE AGAIN
积分:2733
提交:781 / 1622
回复 @Mike is Fool :
并没有卡常,标称极限数据0.3秒过。
正解:首先枚举长度L,一段连续重复子串一定包含了两个下标为L的倍数的字符,设这两个位置为a1,a2,首先求出k = LCP(Suffix(a1),Suffix(a2))。如果k%L!=0那么记录jj = L - k%L,再次求LCP(Suffix(a1-jj),Suffix(a2-jj)),取两者的最大值更新答案就好。

题目 2605 [HZOI 2016] 寒假ing
2017-01-26 11:01:00
Gravatar
AntiLeaf
积分:3393
提交:1527 / 4369
回复 @Mike is Fool :
懒得写n*反ackmann(n)的Tarjan了......再说这个做法本来不就自带一个log么......

Gravatar
FoolMike
积分:5200
提交:1165 / 2240
回复 @AntiLeaf :
我想我们是不是应该试试SAM+Tarjan- -这样速度应该是挺快的

Gravatar
AntiLeaf
积分:3393
提交:1527 / 4369
回复 @Mike is Fool :
我写的就是后缀自动机+ST LCA......

Gravatar
FoolMike
积分:5200
提交:1165 / 2240
回复 @ONCE AGAIN :
还有一点,如果不反转的话怎么求向前匹配长度呢?似乎只能求向后匹配的长度吧。
是的,我发现了,应该在开大一点,但是卡常我也是无语了,不是要我们都来SAM+Tarjan吧。难道说应该hash乱搞!?

Gravatar
FoolMike
积分:5200
提交:1165 / 2240
回复 @AntiLeaf :
后缀自动机,如果你不用RMQ优化O(1)求LCA,每次的复杂度可是O(nlog^2n)的,后缀树组+RMQ或者后缀自动机+RMQ复杂度应该差不多

Gravatar
Go灬Fire
积分:3416
提交:1738 / 3778
见字符串即被干穿

题目 2605 [HZOI 2016] 寒假ing
2017-01-26 08:13:44
Gravatar
ONCE AGAIN
积分:2733
提交:781 / 1622
@Mike is Fool
为什么要把原串复制一遍?这样可使把数据扩大了一倍啊。而且你的基数排序设置的桶的最大编号也是有问题的,最后一个点会WA。

Gravatar
AntiLeaf
积分:3393
提交:1527 / 4369
回复 @Mike is Fool :
我后缀自动机T成狗......

Gravatar
FoolMike
积分:5200
提交:1165 / 2240
求神犇讲解压常数技巧,我完全是按照罗穗骞论文中说的做法写的。