zoukankan      html  css  js  c++  java
  • [MtOI2018]情侣?给我烧了!

    Solution

    看到恰好这一关键词,容易想到二项式反演,那么接下来就上套路。令 (F(x)) 表示先强制 (k) 对情侣和睦,剩下的人随便安排座位的方案。

    [F(x)=inom{n}{x}^2x!2^x(2n-2x)! ]

    上式组合意义为先令其中特定 (x) 行是和睦的((inom{n}{x}) 种),然后选 (x) 对情侣分别和这些排匹配((inom{n}{x}x!) 种),一对情侣的顺序可以交换((2^x) 种),剩下的人随便填(((2n-2x)!) 种)。

    (G(x)) 表示恰好有 (x) 对情侣是和睦的的方案数,容易知道

    [F(x)=sum_{i=x}^n inom{i}{x} G(i) ]

    那么

    [G(x)=sum_{i=x}^n (-1)^{i-x} inom{i}{x} F(i)=sum_{i=x}^n (-1)^{i-x} inom{i}{x} inom{n}{i}^2i!2^i(2n-2i)! ]

    (G(x))(O(n)) 的,每次询问求 (n) 次,总复杂度 (O(Tn^2)),显然过不了,考虑优化。

    将二项式系数展开成阶乘,再将无关变量提到前面,有

    [G(x)=sum_{i=x}^n (-1)^{i-x}2^i frac{i!n!n!i!(2n-2i)!}{x!(i-x)!i!i!(n-i)!(n-i)!}=frac{(n!)^2}{x!}sum_{i=x}^n (-1)^{i-x}frac{2^i}{(i-x)!} inom{2n-2i}{n-i} ]

    变换下指标

    [G(x)=frac{2^x(n!)^2}{x!}sum_{i=0}^{n-x}inom{2n-2x-2i}{n-x-i}frac{(-2)^i}{i!} ]

    如果把 (n-x) 看成一个整体,那么后面的和式就和 (n)(x) 无关了,令

    [g(m)=sum_{i=0}^m inom{2m-2i}{m-i}frac{(-2)^i}{i!} ]

    把所有 (g(m)) 处理出来,复杂度 (O(n^2)),查询 (O(1))。那么

    [G(x)=frac{2^x(n!)^2}{x!} g(n-x) ]

    总复杂度 (O(n^2+Tn))

    [Tleq 2 imes 10^5,nleq 5 imes 10^6 ]

    单次询问改为只询问一个特定的 (k)

    Solution

    需要快速求出 (g(m)) ,那么最好是能 (O(n)) 递推。令 (G(z)) 是序列 (<g(0),g(1),dots>) 的生成函数。观察到 (G(x)) 实际上是两个函数的卷积,

    [G(z)=sum_{igeq 0} inom{2i}{i} z^i sum_{igeq 0} frac{(-2)^i}{i!} z^i ]

    后面的显然是 (e^{-2z}) ,观察到前面的包含一个 (inom{2i}{i}),所以考虑可以由卡特兰数得到。卡特兰数是

    [C_n=frac{inom{2n}{n}}{n+1} ]

    其生成函数为

    [C^{#}(z)=frac{1-sqrt{1-4z}}{2z}=sum_{igeq 0} C_i z^i ]

    对其乘上一个 (z) 后再微分,实际上就是对每个 (C_i) 乘上一个 (i+1),得到 (inom{2i}{i})

    [sum_{igeq 0} inom{2i}{i} z^i=frac{d(zC^{#}(z))}{dz}=frac{1}{sqrt{1-4z}} ]

    那么

    [G(z)=frac{e^{-2z}}{sqrt{1-4z}} ]

    对其微分

    [G'(z)=frac{8ze^{-2z}}{(1-4z)^{frac{3}{2}}}=frac{8z}{1-4z}frac{e^{-2z}}{sqrt{1-4z}}=frac{8zG(z)}{1-4z} ]

    [G'(z)=8zG(z)+4zG'(z) ]

    展开为幂级数

    [sum_{igeq 0} ig(i)z^{i-1}=8sum_{igeq 0}g(i)z^{i+1}+4sum_{igeq 0} ig(i) z^i ]

    统一幂次(注意到左边当 (i=0) 时,式子为 (0)

    [sum_{igeq 0} (i+1)g(i+1)z^i=sum_{igeq 1}8g(i-1)z^i+sum_{igeq 0} 4ig(i) z^i ]

    至此,我们得到了递推式

    [g(n)=frac{4(n-1)}{n}g(n-1)+frac{8}{n}g(n-2) quad (ngeq 2) ]

    以及 (g(0)=1)(g(1)=0),复杂度 (O(n+T))

  • 相关阅读:
    Borladn传奇终结巨人倒下了
    C#数据导出到excel
    ADO.NET Entity Framework学习笔记(4)ObjectQuery对象
    ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转]
    在Vista,WIN2K8下IE7.0就不能正常访问asp.net development server解决办法
    获取SQL Server表字段的各种属性
    白话说.net事件和委托
    Ado.Net Entity : Object doesn’t display linked members (foreign keys)
    移动飞信WEB发送服务接口
    asp.net FormsAuthentication 认证
  • 原文地址:https://www.cnblogs.com/wwlwQWQ/p/14314905.html
Copyright © 2011-2022 走看看