zoukankan      html  css  js  c++  java
  • [题解] LuoguP2791 幼儿园篮球题

    https://www.luogu.com.cn/problem/P2791

    卡时间卡空间的duliu题(

    但NMSL好评

    考虑一次询问(n,m,k),由于是随机选的球,所以期望就是所有方案的权值和 / 方案数

    枚举有多少没气的

    [frac{1}{inom{n}{k}}sumlimits_{i=0}^k inom{m}{i}inom{n-m}{k-i} i^L ]

    跑掉前面那个不管,我们来看后面

    有个(i^L)我算个啥啊,把那玩意儿用第二类斯特林数展开

    [egin{aligned} &quad sumlimits_{i=0}^k inom{m}{i} inom{n-m}{k-i} i^L \ &= sumlimits_{i=0}^{k} inom{m}{i} inom{n-m}{k-i} sumlimits_{j=0}^{i} inom{i}{j} egin{Bmatrix} L \ j end{Bmatrix} j! \ &= sumlimits_{j=0}^k egin{Bmatrix}L \ jend{Bmatrix}j! sumlimits_{i=j}^{k} inom{m}{i}inom{i}{j} inom{n-m}{k-i} \ &= sumlimits_{j=0}^{k} egin{Bmatrix}L \ jend{Bmatrix}j!sumlimits_{i=j}^k inom{m}{j}inom{m-j}{i-j}inom{n-m}{k-i} \ &= sumlimits_{j=0}^{k} inom{m}{j}egin{Bmatrix}L \ jend{Bmatrix}j!sumlimits_{i=j}^kinom{m-j}{i-j}inom{n-m}{k-i} \ &= sumlimits_{j=0}^{k} inom{m}{j}egin{Bmatrix}L \ jend{Bmatrix}j!sumlimits_{i=0}^{k-j}inom{m-j}{i}inom{n-m}{k-i-j} end{aligned} ]

    然后后面是一个范德蒙德卷积)

    大概长这样

    [sumlimits_{i=0}^n inom{a}{i}inom{b}{n-i} = inom{a+b}{n} ]

    感性理解一下就是两坨东西,各有(a,b)个,然后枚举第一堆里选(i)个第二堆里选(n-i)个,共选(n)个出来,就是(C(a+b,n))

    所以

    [egin{aligned}&quad sumlimits_{j=0}^{k} inom{m}{j}egin{Bmatrix}L \ jend{Bmatrix}j!sumlimits_{i=0}^{k-j}inom{m-j}{i}inom{n-m}{k-i-j} \ &= sumlimits_{j=0}^{k} inom{m}{j}egin{Bmatrix}L \ jend{Bmatrix}j!inom{n-j}{k-j} \ &= sumlimits_{j=0}^{k} inom{m}{j}egin{Bmatrix}L \ jend{Bmatrix}j!inom{n-j}{n-k}end{aligned} ]

    实际上(j)只需要跑到(min {L,m,k})(m le n)

    于是FFT求出第(L)行的第二类斯特林数,枚举(j)累加答案

    但是

    这duliu出题人卡了时间

    众所周知,取模特别特别的慢,所以我们考虑给组合数约分,即

    [Ans = frac{k!(n-k)!}{n!}sumlimits_{j=0}^{L} frac{m!}{j!(m-j)!}egin{Bmatrix}L \ jend{Bmatrix}j!frac{(n-j)!}{(n-k)!(k-j)!} ]

    先约分,然后把与(j)无关的提到外面,可以得到

    [Ans = frac{k!m!}{n!} sumlimits_{j=0}^{L} frac{(n-j)!}{(m-j)!(k-j)!}egin{Bmatrix}L \ jend{Bmatrix} ]

    大大减少了做乘法和取模的次数)

    还有就是在求逆元的时候,用乘法逆元2的方法,可以减少取模次数

    然后在求第二类斯特林数的时候那个(L)次幂可以线性筛预处理出来

    这样应该能卡过去了,Code

  • 相关阅读:
    python 基础(三) list 的用法
    python 基础(二) string 的用法
    python 基础(四)购物车(list类型练习)
    python 基础(一)猜年龄游戏
    centOS 7 环境搭建之安装 python 3
    centOS 7 环境搭建之安装 JDK 8
    源代码管理相关命令(Git常用命令、Nuget常用命令、CMD常用命令)
    .Net Core 3.0 关于Windows Form和WPF的全面支持
    .Net Core 常用开发工具(IDE和运行时、Visual Studio插件、Visual Studio Code插件)
    .Net Core 精选公众号集合(保持更新)
  • 原文地址:https://www.cnblogs.com/wxq1229/p/13295132.html
Copyright © 2011-2022 走看看