sutoringu
题意:
询问有多少一个字符串内有多少个个子区间,满足可以分成k个相同的串。
分析:
首先可以枚举一个长度len,表示分成的k个长为len的串。然后从1开始,每len的长度分成一块,分成(n-1)/k+1块,首先可以求出连续的k块的是否是合法。
此时只求了起点是1+len*i的串,还有些起点在块内的没有求。
枚举k-1个相同的块,设这些块为i...j,j-i+1=k。然后与求一下第i块和第i-1块最长后缀,设为a,求一下第j块和第j+1块的最长前缀,设为b。说明如果起点在第i-1块的串,必须是后面a个字符,这些串的终点必须是第j+1块的前b个字符。于是计算一下。
如何求连续的k块是否是一样的?可以求出这连续k块在的rank,然后取一个最大的rank和一个最小的rank,然后求之间的height最小值即可。
复杂度$nlog^2n$。
代码:
#include #include #include #include #include #include #include #include #include #include