本题似乎没有 n+k 为奇数的数据
查看原帖
本题似乎没有 n+k 为奇数的数据
576073
Singulet31258楼主2023/2/14 19:09

我有一份代码没特判 n+k 为奇数(此时答案为 0)的情况,在 n+k 为奇数的数据中这份代码不一定会得到 0,但还是 AC 了。

#include<bits/stdc++.h>
using namespace std;
constexpr int MAXN=2005,P=1e9+9;
int n,k,a[MAXN],b[MAXN],c[MAXN][MAXN],f[MAXN][MAXN],g[MAXN],fac[MAXN],ans;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>k;
	fac[0]=1;
	for(int i=1;i<=n;++i)
		fac[i]=(long long)fac[i-1]*i%P;
	for(int i=1;i<=n;++i)
		cin>>a[i];
	for(int i=1;i<=n;++i)
		cin>>b[i];
	sort(a+1,a+n+1);
	sort(b+1,b+n+1);
	for(int i=1,j=1;i<=n;g[i++]=j)
		while(j<=n&&a[i]>b[j])
			++j;
	f[0][0]=c[0][0]=1;
	for(int i=1;i<=n;c[i][0]=f[i][0]=1,++i)
		for(int j=1;j<=i;++j){
			c[i][j]=(c[i-1][j]+c[i-1][j-1])%P;
			f[i][j]=(f[i-1][j]+(long long)f[i-1][j-1]*(g[i]-j))%P;
		}
	k=n+k>>1;
	for(int i=k;i<=n;i+=2)
		ans=(ans+(long long)c[i][k]*f[n][i]%P*fac[n-i])%P;
	for(int i=k+1;i<=n;i+=2)
		ans=(ans-(long long)c[i][k]*f[n][i]%P*fac[n-i])%P;
	cout<<(ans+P)%P;
	return 0;
}
2023/2/14 19:09
加载中...