扯淡

看到题目想到二项式反演

然后忘了给求阶乘的时候取模,调了一晚上

真令人窒息

思路

二项式反演

首先二项式反演还有另一种形式(不会证)

设\(G_i\)为有至少i个的方案数量,\(F_i\)为恰好有i个的方案数量

则有以下形式:

\[G_k=\Sigma_{i=k}^{n}C_i^kF_i \Rightarrow F_k=\Sigma_{i=k}^n(-1)^{i-k}C_i^kG_i
\]

所以套入本题

设\(F_i\)为恰好i对糖果比药片能量多的方案数,\(G_i\)为至少i对糖果比药片能量多的方案数

则可以对\(G_i\)dp求解

\(dp_{i,j}\)表示前i个,j对糖果比药片能量多的方案数,\(L_i\)是药片和糖果能量均从小到大排序后,最后一个能量小于第i个糖果的药片的标号,则\(G_i=dp_{n,i}\times(n-i)!\),原因显然,j对之后剩下的随便排列即可,所以乘上阶乘

dp方程是

\[dp_{i,j}=dp_{i-1,j}+dp_{i-1,j-1}*(L_i-j+1)
\]

然后二项式反演即可

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
int a[3000],b[3000],dp[3000][3000],jc[3000],g[3000],inv[3000],n,k,t;
const int MOD = 1000000009;
int pow(int a,int b){
int ans=1;
while(b){
if(b&1)
ans=(1LL*a*ans)%MOD;
a=(1LL*a*a)%MOD;
b>>=1;
}
return ans%MOD;
}
int C(int n,int m){
return 1LL*jc[n]*inv[m]%MOD*inv[n-m]%MOD;
}
signed main(){
scanf("%lld %lld",&n,&k);
if((n+k)%2){
printf("0\n");
return 0;
}
t=(n+k)/2;
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
scanf("%lld",&b[i]);
sort(a+1,a+n+1);
sort(b+1,b+n+1);
int lastpos=0;
dp[0][0]=1;
for(int i=1;i<=n;i++){
dp[i][0]=dp[i-1][0];
for(int j=1;j<=i;j++){
for(;b[lastpos]<a[i]&&lastpos<=n;lastpos++);
lastpos--;
dp[i][j]=(1LL*dp[i-1][j]+1LL*dp[i-1][j-1]*max(lastpos-j+1,0LL)%MOD)%MOD;
}
}
jc[0]=1;
inv[0]=1;
for(int i=1;i<=n;i++){
jc[i]=1LL*jc[i-1]*i%MOD;
inv[i]=pow(jc[i],MOD-2);
}
for(int i=0;i<=n;i++)
g[i]=1LL*dp[n][i]*jc[n-i]%MOD;
int ans=0;
for(int i=t;i<=n;i++)
ans=(ans+1LL*(((i-t)%2)?-1:1)*C(i,t)*g[i]%MOD)%MOD;
printf("%lld\n",(ans%MOD+MOD)%MOD);
return 0;
}

最新文章

  1. EXCEL如何提取文字中包含的数字?
  2. Centos 6.5 SNMP客户端安装及配置版本net-snmp-5.7.3
  3. HTML的格式、内容容器、表格标签
  4. Android 使WebView支持HTML5 Video(全屏)播放的方法
  5. UCOS-互斥信号量(学习笔记)
  6. Oracle:安装中的注意事项
  7. Notes of the scrum meeting(11/2)
  8. ADC及DA的头文件复析
  9. Ghost克隆软件
  10. Oracle数据库运维优化六脉神剑口诀
  11. Android四个存储数据的SharedPreferences
  12. sublime markdown编辑配色
  13. [微信JSSDK] 解决SDK注入权限验证 安卓正常,IOS出现config fail
  14. LAB8 android
  15. 内核中dump_stack()的实现,并在用户态模拟dump_stack()【转】
  16. 【20】策略者模式(Strategy Pattern)
  17. 走进HTTP协议之二 基本HTTP机制
  18. centos的mysql升级之后密码重置
  19. BP神经网络学习
  20. WordPress REST API 内容注入漏洞

热门文章

  1. STL之Queue容器
  2. hdu5064 DLX可重复覆盖+二分
  3. 如何在Sitecore CMS中管理桌面快捷方式
  4. git使用遇到的坑
  5. 20165305 苏振龙《Java程序设计》第四周课上测试补做
  6. [转]Hive开发经验问答式总结
  7. Druid-目前最好的连接池
  8. loadRunner手动关联,通过 web_reg_save_param()函数
  9. 读QT5.7源码(三)Q_OBJECT 和QMetaObject
  10. What’s WOYO PDR-007 Paintless Dent Repair Heat Induction?