zoukankan      html  css  js  c++  java
  • luoguP4859 已经没有什么好害怕的了(二项式反演)

    luoguP4859 已经没有什么好害怕的了(二项式反演)

    祭奠天国的bzoj。

    luogu

    题解时间

    先特判 $ n - k $ 为奇数无解。

    为了方便下记 $ m = ( n + k ) / 2 $ 为 $ A>B $ 的个数。

    恰好改钦定。

    设 $ dp( i , j ) $ 为考虑 $ A $ 的前 $ i $ 个数钦定 $ j $ 对 $ A>B $ 的方案数。

    有钦定 $ g( i ) = dp( n , i ) imes ( n - i )! $ 。

    然后直接二项式反演 $ f( m ) = sumlimits_{ i = m }^{ n } ( - 1 )^{ i - m } inom{ i }{ m } g( i ) $ 。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long lint;
    struct pat{int x,y;pat(int x=0,int y=0):x(x),y(y){}bool operator<(const pat &p)const{return x==p.x?y<p.y:x<p.x;}};
    template<typename TP>inline void read(TP &tar)
    {
    	TP ret=0,f=1;char ch=getchar();
    	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0'&&ch<='9'){ret=ret*10+(ch-'0');ch=getchar();}
    	tar=ret*f;
    }
    namespace RKK
    {
    const int N=2011,mo=1000000009;
    lint add(lint a,lint b){return (a+=b)>=mo?a-mo:a;}
    void doadd(lint &a,lint b){if(b<0) b+=mo;if((a+=b)>=mo) a-=mo;}
    lint fac[N],c[N][N];
    void init()
    {
    	fac[0]=1;for(int i=1;i<=2000;i++) fac[i]=fac[i-1]*i%mo;
    	for(int i=0;i<=2000;i++) c[i][0]=1;
    	for(int i=1;i<=2000;i++)for(int j=1;j<=i;j++) c[i][j]=add(c[i-1][j-1],c[i-1][j]);
    }
    int n,m,a[N],b[N];
    lint dp[N][N],ans;
    int main()
    {
    	init(),read(n),read(m);for(int i=1;i<=n;i++) read(a[i]);for(int i=1;i<=n;i++) read(b[i]);sort(a+1,a+1+n),sort(b+1,b+1+n);
    	if((n-m)&1){puts("0");return 0;}m=(n+m)/2;
    	for(int i=0;i<=n;i++) dp[i][0]=1;
    	for(int i=1,k=1;i<=n;i++)
    	{
    		while(k<=n&&a[i]>b[k]) k++;
    		for(int j=1;j<=n;j++) dp[i][j]=add(dp[i-1][j],dp[i-1][j-1]*(k-j)%mo);
    	}
    	for(int i=m;i<=n;i++) doadd(ans,(((i-m)&1)?-1ll:1ll)*c[i][m]*dp[n][i]%mo*fac[n-i]%mo);
    	printf("%lld
    ",ans);
    	return 0;
    }
    }
    int main(){return RKK::main();}
    
  • 相关阅读:
    nginx接收tcp请求转发server
    eclipse 配置github 提交代码
    eclipse安装JDK11
    java内存管理
    进程 线程 纤程 中断
    DCL单例为什么要加volatile
    如何清理history
    后置引用
    nc 工具使用
    ip_local_port_range 和 ip_local_reserved_ports
  • 原文地址:https://www.cnblogs.com/rikurika/p/13435004.html
Copyright © 2011-2022 走看看