简要题意:给字符集大小和串长,求border个数的平方的期望
(nle 1e5)
基本的转化就不说了,现在需要对一对(i,j)求他们都是(border)的方案数。
(i)是一个(border) (Leftrightarrow) (n-i)是一个循环节(可以超出)
同时我们可以知道(f_i(s)=1)的概率是(k^{-i})
现在考虑(n-i=i_1, n-j=j_2)
枚举(i,j)的答案是(k^{max (i_1+j_1-n,gcd (i_1,j_1))-n})
proof:
首先考虑(i_1+j_1 le n)的情况,这种情况下显然可以通过(+j)之后每次相减做到(gcd (i_1,j_1))
现在考虑(i_1+j_1>n)的时候。不妨设(i_1>j_1),同时我们有(i<j),(j < i_1)
现在相当于要统计联通块的个数(t)。
将所有点按照(mod gcd(i_1,j_1))分组
我们还不难发现,每个点的度数最大是(2)。考虑一下度数正好都是(2)的时候会发生什么。
首先是(+i_1)的边将原图分成了一堆链。之后每个点相当于是在(i_1/gcd(i_1,j_1))的环上走(j_1/gcd(i_1,j_1))
因为步长和环长互质,所以这一定是一个大环。
不难发现如果两条边都向左的点度数都是2,那这个图就是一个大环了。
于是我们统计有多少个(x mod gcd(i_1,j_1)),满足这个分组的店中有至少一个点度数不满即可。
考虑(>n-i_1)的点,这些点没有向右连的边,向连的边我们只用关注(j_1)的边,如果有则(i_1)的边也一定存在。
考虑(le j_1)的点才没有向左连的边,我们考虑这样的区间((i,j_1])。
讨论一下:
-
如果有(j_1-ige gcd(i_1,j_1))则每个(x)都被漏掉了,直接计算边数就能算出连通块个数是(i_1+j_1-n)
-
如果(j_1-ile gcd(i_1,j_1))则恰好有(gcd(i,j)-(j_1-i))条边是成环了,算出来(t=gcd (i_1,j_1))
综上,答案是(k^{max (i_1+j_1-n,gcd (i_1,j_1))-n})
这个可以在(nlog ^2n)的时间做出来