求助,10分
查看原帖
求助,10分
341373
Autofreeze楼主2021/1/26 19:44

RT,除了第六个点全 WA /kk

#include<bits/stdc++.h>
#include<tr1/unordered_map>
#define N 2001001
#define MAX 2001
#define re register
using namespace std;
using namespace tr1;
typedef long long ll;
const ll mod=1000000007;
inline void read(re ll &ret)
{
    ret=0;re char c=getchar();re bool pd=false;
    while(!isdigit(c)){pd|=c=='-';c=getchar();}
    while(isdigit(c)){ret=(ret<<1)+(ret<<3)+(c&15);c=getchar();}
    ret=pd?-ret:ret;
    return;
}
ll n,k,a[N],b[N],m,dp[MAX][MAX],cnt[N],f[N],g[N],jc[N],ans,inv[N],invv[N];
inline ll c(re ll a,re ll b)
{
	return jc[a]*invv[a-b]%mod*invv[b]%mod;
}
main()
{
	read(n);
	read(k);
	jc[0]=1;
	for(re int i=1;i<=n;i++)
		read(a[i]),jc[i]=jc[i-1]*i%mod;
	inv[0]=inv[1]=invv[0]=invv[1]=1;
	for(re int i=2;i<=n;i++)
		inv[i]=(mod-mod/i)*inv[mod%i]%mod,invv[i]=invv[i-1]*inv[i]%mod;
	for(re int i=1;i<=n;i++)
		read(b[i]);
	if((n-k)&1)
	{
		puts("0");
		exit(0);
	}
	m=(n+k)>>1;
	sort(a+1,a+n+1);
	sort(b+1,b+n+1);
	for(re int i=1;i<=n;i++)
		cnt[i]=upper_bound(b+1,b+n+1,a[i])-b-1;
	dp[0][0]=1;
	for(re int i=1;i<=n;i++)
	{
		dp[i][0]=dp[i-1][0];
		for(re int j=1;j<=i;j++)
			dp[i][j]=(dp[i-1][j]+max((cnt[i]-(j-1)),0ll)*dp[i-1][j-1]%mod)%mod;
	}
	for(re int i=m;i<=n;i++)
	{
		re ll tmp=((i-m)&1)?-1:1;
		ans+=tmp*c(i,m)%mod*jc[n-i]%mod*dp[n][i]%mod;
		ans=(ans+mod)%mod;
	}
	printf("%lld\n",ans);
    exit(0);
}

2021/1/26 19:44
加载中...