思路

  • “恰k个”考虑求至少k、k+1……个容斥
  • 题面说所有数字都不同,可以将所求转化为糖比药多的组数恰为\((n+k)/2\)的方案数
  • \(f[i][j]\)数组我觉得更好的理解方式是"前i个已经安排了j组糖大于药、别的先没管"的方案数
  • \(f[n][i]*(n-i)!\)即为把其它的安排了以后的方案数,但是这里面有重的
  • 设\(g[i]\)为恰i个的方案数。$$g[i]=f[n][i]*(n-i)!-\sum_{j=i+1}ng[j]*C_ji$$要说为什么又去重又剪掉不合法了,我也不通透,目前只是已知这样做是对的话那直观感受一下应该对吧……
#include <cstdio>
#include <algorithm>
using namespace std; typedef long long ll;
const int mod = 1e9 + 9;
const int maxn = 2005; int n, k, m, ans;
int a[maxn], b[maxn];
ll f[maxn][maxn], g[maxn];
ll fac[maxn], C[maxn][maxn]; int READ() {
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= n; i++)
scanf("%d", &b[i]);
m = (n + k) / 2;
return (n + k) % 2;
} void PRE() {
sort(a + 1, a + 1 + n);
sort(b + 1, b + 1 + n); fac[0] = 1;
for (int i = 1; i <= n; i++)
fac[i] = fac[i - 1] * i % mod; for (int i = 0; i <= n; i++) {
C[i][0] = 1;
for (int j = 1; j <= i; j++)
C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;
}
} void DP() {
for (int i = 0; i <= n; i++)
f[i][0] = 1;
for (int i = 1, p = 0; i <= n; i++) {
for (; p < n && b[p + 1] < a[i]; p++);
for (int j = 1; j <= i; j++) {
f[i][j] = (f[i - 1][j - 1] * max(0, p - j + 1) % mod + f[i - 1][j]) % mod;
}
}
for (int i = n; i >= m; i--) {
g[i] = f[n][i] * fac[n - i] % mod;
for (int j = i + 1; j <= n; j++) {
g[i] = (g[i] - g[j] * C[j][i] % mod) % mod;
}
}
ans = (g[m] + mod) % mod;
} int main() {
if (READ() == 1) {
return !printf("0\n");
}
PRE();
DP();
return !printf("%d\n", ans);
}

最新文章

  1. C# Math类简介
  2. mysql support chinese
  3. Android Bitmap那些事之如何优化内存
  4. linux下神奇的script命令
  5. Css溢出隐藏
  6. Linux中查看是否是固态硬盘(SSD)
  7. struts2 + jquery 开发环境下的ajax构建方法(action写法 + struts.xml配置 + js调用代码)
  8. A Game of Thrones(13) - Tyrion
  9. hibernate在地图的方法之一协会
  10. javascript动画:velocity.js学习
  11. 3个人一起写的EI论文可以检索到啦~ --&gt; Exploring the use of a 3D Virtual Environment in Chinese Cultural Transmission
  12. */美女镇楼/*&gt;&gt;&gt;---PHP中的OOP--&gt;面对过程与面对对象基础概念与内容--(封装、继承、多态)
  13. Javascript URI 解析介绍
  14. 苹果审核被拒,解析奔溃日志.txt转crash文件
  15. MyEclipse10或者eclipse中配置开发Python的Pydev插件安装教程
  16. 关于linux下mysql 5.7.x数据库的yum的安装方法
  17. Python多线程爬虫
  18. Python MySQLdb模块连接操作mysql数据库实例_python
  19. EControl平台测试向生产版本工程切换说明
  20. 免费获取半年 Bitdefender Total Security 2014

热门文章

  1. MySQL存储过程示例
  2. asterisk ss7 ${CALLERID(rdnis)}变量为空问题
  3. Shell读取文件内容【转】
  4. BZOJ-4003:城池攻占(可并堆+lazy标记)
  5. 【Lintcode】106.Convert Sorted List to Balanced BST
  6. python爬虫知识点总结(三)urllib库详解
  7. BZOJ1861:[ZJOI2006]书架
  8. 关于分支和主干Merge时要注意的事项
  9. SQL Server 将查询的结果生成insert语句
  10. jvm学习五: 方法执行过程