ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-08-04 18:34:41  阅读:295  来源: 互联网

标签:ch int mo lint luoguP4859 反演 二项式 void


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

祭奠天国的bzoj。

luogu

题解时间

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

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

恰好改钦定。

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

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

然后直接二项式反演 $ f( m ) = \sum\limits_{ i = m }^{ n } ( - 1 )^{ i - m } \binom{ 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\n",ans);
	return 0;
}
}
int main(){return RKK::main();}

标签:ch,int,mo,lint,luoguP4859,反演,二项式,void
来源: https://www.cnblogs.com/rikurika/p/13435004.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有