zoukankan      html  css  js  c++  java
  • CF1516E

    题意

    给定(n,K),初始(a_i=i(1le ile n)),每次操作选择两个不同的位置交换。
    (1le ile K),进行恰好(i)次操作的排列的个数。
    (nle 10^9,Kle 200)

    做法1

    有众多的(O(K^3))做法,这里介绍一个(O(Klog Klog n))的。

    (f(i,j))(i)阶排列,进行(j)次的方案数。
    (f(i,j)=f(i-1,j)+(i-1)f(i-1,j-1))
    初始(f(2,j)=1)

    写成生成函数的形式:(F(2)=frac{1}{1-x},F(n)=F(n-1)(1+(n-1)x)=frac{1}{1-x}prodlimits_{k=2}^{n-1}(1+kx))

    (prodlimits_{k=1}^N (1+kx))可以倍增:
    假设(prodlimits_{k=1}^N (1+kx)=sumlimits_{i=0}^{infty} a_ix^i)
    那么有:

    [egin{aligned} prodlimits_{k=N+1}^{2N}(1+kx)&=prodlimits_{k=1}^N (1+(k+N)x)\ &=sumlimits_{i=0}^{infty}a_ix^i(sumlimits_{j=0}^{N-i} {N-ichoose j}N^jx^j)\ end{aligned}]

    后面那个可以轻松的写成卷积形式,总复杂度(T(n)=T(n/2)+O(Klog K)=O(Klog K log n))

    做法2

    学了个(O(Klog K))
    (prodlimits_{k=1}^N (1+kx)= ext{epx}(sumlimits_{k=1}^N ext{ln}(1+kx)))
    (sumlimits_{k=1}^N ext{ln}(1+kx)=sumlimits_{k=1}^N =sumlimits_{k=1}^N sumlimits_{i=1}^{infty} frac{(-kx)^i}{i})

    (sumlimits_{k=1}^N sumlimits_{i=1}^{infty} k^ifrac{x^i}{i!}mod x^{K+1})可以(O(Klog K))求。

  • 相关阅读:
    flex 居中并两端对齐
    搭建Docker环境---私有仓库registry搭建
    搭建Docker环境---常用命令
    搭建Docker环境---Docker安装(centos7)
    搭建Docker环境---Docker概述
    Shell脚本
    安装webstrom2019
    mysql主从配置
    MySql5.7安装(centos 7)
    MySQL父子节点查询
  • 原文地址:https://www.cnblogs.com/Grice/p/14688488.html
Copyright © 2011-2022 走看看