zoukankan      html  css  js  c++  java
  • 【题解】魔力环

    题目链接

    题目大意:给你(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(nlog^2n))还是(O(nlog n))?反正可松过。

    据说有(O(nloglog n))的做法?

    代码太丑不贴了……

  • 相关阅读:
    uva 10129 poj 1386 hdu 1116 zoj 2016 play on words
    redis持久化
    Redis事务
    非阻塞I/O多路复用机制
    SFTP
    FTP
    http协议特点及session共享及单点登录
    什么是cookie以及cookie的特性、优缺点
    异步IO和同步IO的区别:
    TCP操作与原理
  • 原文地址:https://www.cnblogs.com/ztc03/p/12014487.html
Copyright © 2011-2022 走看看