首页 > 其他分享 >P4859

P4859

时间:2024-10-02 19:11:29浏览次数:1  
标签:ch P4859 int long read 2020 fac

如果不能越级打怪还叫什么主角

#include<bits/stdc++.h>
namespace my_std {
	using namespace std;
#define rep(i,x,y) for (int i=(x);i<=(y);i++)
#define drep(i,x,y) for (int i=(x);i>=(y);i--)
#define go(x) for (int i=head[x];i;i=edge[i].nxt)
	const long long mod=1e9+9;
	template<typename T>
	inline void read(T& t) {
		t=0;
		char f=0,ch=getchar();
		double d=0.1;
		while(ch>'9'||ch<'0') f|=(ch=='-'),ch=getchar();
		while(ch<='9'&&ch>='0') t=t*10+ch-48,ch=getchar();
		if(ch=='.') {
			ch=getchar();
			while(ch<='9'&&ch>='0') t+=d*(ch^48),d*=0.1,ch=getchar();
		}
		t=(f?-t:t);
	}
	template<typename T,typename... Args>
	inline void read(T& t,Args&... args) {
		read(t);
		read(args...);
	}
}
using namespace my_std;
long long ksm(long long x,int y) {
	long long ret=1;
	for (; y; y>>=1,x=x*x%mod) if (y&1) ret=ret*x%mod;
	return ret;
}
long long inv(long long x) {
	return ksm(x,mod-2);
}
long long fac[2020],_fac[2020];
void init() {
	fac[0]=_fac[0]=1;
	rep(i,1,2020-1) _fac[i]=inv(fac[i]=fac[i-1]*i%mod);
}
long long C(int n,int m) {
	return n>=m&&m>=0?fac[n]*_fac[m]%mod*_fac[n-m]%mod:0;
}
int n,K;
int a[2020],b[2020],r[2020];
long long dp[2020][2020],f[2020];
long long ans[2020];
int main() {
	init();
	read(n,K);
	if ((n+K)&1) return puts("0"),0;
	K=(n+K)>>1;
	rep(i,1,n) read(a[i]);
	rep(i,1,n) read(b[i]);
	sort(a+1,a+n+1);
	sort(b+1,b+n+1);
	int c=0;
	rep(i,1,n) {
		while (c<n&&b[c+1]<a[i]) ++c;
		r[i]=c;
	}
	dp[0][0]=1;
	rep(i,1,n)
	rep(j,0,i)
	dp[i][j]=(dp[i-1][j]+(j?1ll*(r[i]-j+1)*dp[i-1][j-1]%mod:0ll))%mod;
	rep(i,0,n) f[i]=dp[n][i]*fac[n-i]%mod;
	drep(i,n,K) {
		ans[i]=f[i];
		rep(j,i+1,n) ans[i]=(ans[i]-ans[j]*C(j,i)%mod+mod)%mod;
	}
	cout<<ans[K];
	return 0;
}

标签:ch,P4859,int,long,read,2020,fac
From: https://www.cnblogs.com/zan-mei-tai-yang/p/18444994

相关文章

  • P4859 已经没有什么好害怕的了
    P4859已经没有什么好害怕的了二项式反演看到恰好,求方案数,可以想到二项式反演。套路钦定\(k\)组糖果比药片能量大,其他任意组合,这样的方案数记为\(g_k\)。再设\(f_k\)表示恰好\(k\)组的糖果比药片能量大的方案数,现在要找到\(g\)和\(f\)之间的关系。容易推出\(g_k=\s......
  • P4859 已经没有什么好害怕的了
    传送门题意:给定两个长度\(n\)的互不相同的序列\(a,b\)。要求将它们两两匹配。求有多少种匹配方案恰好有\((n+k)/2\)对\(a_i>b_j\)。\(n\le2000\)。如果\((n+k)\bmod2=1\)输出\(0\)。先将\(a,b\)从小到大排序。\(dp_{i,j}\)表示让\(a_{1\simi}\)匹配\(b_{1\s......
  • P4859 已经没有什么好害怕的了
    原题很好的一道容斥题我们如果想让\(a_i>b_i\)的个数比\(a_i<b_i\)的对数多\(K\),这个限制是比较困难的。因为我们要同时考虑两种情况但我们可以把原问题的限定设为\(a_i>b_i\)的对数为\(\frac{n+K}{2}\),做法就容易了很多。如果\(n+K\)是奇数,直接输出\(0\)即可因此原问题......
  • P4859 已经没有什么好害怕的了 二项式反演
    这道题给出两个数组且每个数字都不同。要求两两配对,这样每一个配对都有一个大小关系。要求第一组大的个数比第二组大的恰好k个配对。显然一共有\(n\)个大小关系,那么容易想到\(n-k\)必然是一个偶数才会有对应方案。那么题目其实是要求第一组比第二组大的个数恰好为\(k+\frac{n-k......
  • P4859 已经没有什么好害怕的了
    题目描述学姐4了。有\(n\)个糖果和\(n\)个药片,它们要进行一一配对。每个糖果或药片都具有互不相同的能量值,要求配对后,糖果比药片能量高的对数,比剩下的对数恰好多\(k\),求方案数。数据范围:\(1\len\le2000\)。题解本来是冲着学姐来的,结果发现自己对容斥理解巨差,甚至想......