题解-CF1205E

这题完全体现了我的 数学推导 能力有多差。


中间还被 alpha 教育了,我不会算这个复杂度/kk

[O(sum_{i=1}^{n} sum_{j|i}sum_{k|frac{i}{j}}1)=O(nlog^2n) ]


还是考虑拆平方的期望,我们发现即为 (sum_{i,j}f(i)f(j)),其中 (f(t)) 代表有一个长度为 (t) 的 border。于是我们想要计算的是每两个 border 有几个串有这么长的 border。每个 border 对应一个 period,而每个 period 即对应唯一的一个长度为 (n) 的串。所以我们可以把 border 转换为 period。

period 的性质即为每个点 (s[t]=s[t+i]),所以我们不妨把相同的点连边,最后连通块的数量即为一个不确定的值,设为 (c),那么贡献即为 (k^c)

结论:(c=max(gcd(i,j),i+j-n))

第一个部分即为弱周期引理,第二个部分感性理解一下(画个图)就能发现。

根据一些等价我们得到下面的式子。(上面是字符串和图论的部分,下面就全是数学推导了)

[ans imes k^n=sum_{i=1}^{n-1}sum_{j=1}^{n-1}k^{max{gcd(i,j), i+j-n}} ]

然后有一个不太能扩展的 (O(nlog^2n)) 做法。

考虑枚举 (gcd(i,j))(i+j),然后计算同时满足 (i,j) 组数。

[sum_{s=2}^{2n-2}sum_{d|s}sum_{i=1}^{n-1}sum_{j=1}^{n-1}[gcd(i,j)=d][i+j=s]\ =sum_{s=2}^{2n-2}sum_{d|s}sum_{i=1}^{n-1}[gcd(i,s-i)=d]\ =sum_{s=2}^{2n-2}sum_{d|s}sum_{i=1}^{[frac{n-1}{d}]}[gcd(i,frac{s}{d}-i)=1]\ =sum_{s=2}^{2n-2}sum_{d|s}sum_{i|frac{s}{d}}mu(i)sum_{j=ik}1 ]

然后上面的式子有一个缺陷,就是 (i,j) 的范围没有表示。

[1le ile n-1\ 1le s-ile n-1\ Rightarrow s+1-nle ile s-1\ ]

然后令 (a=max{1,frac{s}{d}-[frac{n-1}{d}]},b=min{frac{[n-1]}{d},frac{s}{d}-1}),有最终的式子

[sum_{s=2}^{2n-2}sum_{d|s}sum_{i|frac{s}{d}}mu(i)([frac{b}{i}]-[frac{a-1}{i}]) ]

还有一个常见的 (O(nlog{n})) 算法和一个 (O(n)) 算法。看懂了但是不想写了(咕咕有空就补),可以在下面的题解里看到。

reference

木xx木大的 luogu 题解

原文地址:https://www.cnblogs.com/zcr-blog/p/15013395.html