【题解】魔力环

题目链接

题目大意:给你\(m\)个黑球,\(n-m\)个白球,要求把它们串成一个环(旋转后相同算同构,翻转后相同不一定同构),使得环上没有连续的一段黑球,其长度超过\(k\)。求方案数。

一点也不具体解法:

按照常规思路,首先将环从一个点切开。可以观察到构成的序列可能会出现循环。设其循环节长度为\(p\),则必有\(p|\gcd(m,n)\)

设序列长度为\(k\),则可以由\(dp\)算出长度为\(k\),第一个为白球的合法序列数。设由\(i\)个白球,\(j\)个黑球组成的、第一个为白球的合法序列数为\(f_{i,j}\),考虑相邻两个白球间隔为\(d\),则有\(f_{i,j}=\sum_{d=0}^mf_{i-1,j-d}\),可以用多项式快速幂优化。

然而,显然这样会算重复。考虑由\(i\)个白球,\(j\)个黑球组成的、最小循环节为\(i+j\)的,以白球开始的序列数为\(s_{i,j}\),则\(s_{i,j}=f_{i,j}-\sum_{t|i,t|j}s_{\frac it,\frac jt}\)。可以对\(\forall d|n\&\&d|j\),求出\(f_{\frac {n-m}d,\frac md}\),然后暴力枚举因数求出\(s_{\frac {n-m}d,\frac md}\)

接着可以求出由\(i\)个白球,\(j\)个黑球组成的、最小循环节为\(i+j\)的本质不同的环数,即\(\frac {s_{i,j}}i\),累加得到答案。

大概\(O(n\log^2n)\)还是\(O(n\log n)\)?反正可松过。

据说有\(O(n\log\log n)\)的做法?

代码太丑不贴了……

posted @ 2019-12-10 08:16  ztc…  阅读(251)  评论(0编辑  收藏  举报

Please contact lydsy2012@163.com!