题目链接

(Luogu) https://www.luogu.org/problem/P4859
(bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3622

题解

我依然啥都不会啊……

先给\(A,B\)数组从小到大排序。
考虑容斥,设\(f[j]\)表示钦定了\(j\)个满足\(A>B\), 所有钦定方案的方案数总和。
这个怎么算?dp算。设\(dp[i][j]\)表示前\(i\)个的\(f[j]\), 然后发现转移的时候并不知道之前选的那些没有钦定的有几个比当前的大。
怎么办?转换思路,我们考虑先选出钦定的\(B\), 不考虑剩下未钦定的。那么很容易列出方程: \(dp[i][j]=dp[i-1][j]+dp[i-1][j-1]\times (t-i+1)\), 其中\(t\)为\(a_i\)大于\(B\)序列中的多少个数。
最后\(f[j]=dp[n][j]\times (n-j)!\), 完美解决。

容斥怎么办?思考组合意义或者二项式反演,总之最后是一个式子\(g[i]=\sum^n_{j=i}(-1)^{j-i}{i\choose j}f[j]\), 其中\(g[i]\)表示恰好有\(i\)对\(A>B\)的方案数。

时间复杂度\(O(n^2)\).

代码

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cassert>
#include<iostream>
#include<algorithm>
#define llong long long
using namespace std;inline int read()
{int x=0; bool f=1; char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=0;for(; isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^'0');if(f) return x;return -x;
}const int N = 2000;
const int P = 1e9+9;
int a[N+3],b[N+3];
llong dp[N+3][N+3];
llong f[N+3];
llong fact[N+3],finv[N+3];
int n,m;llong quickpow(llong x,llong y)
{llong cur = x,ret = 1ll;for(int i=0; y; i++){if(y&(1ll<<i)) {y-=(1ll<<i); ret = ret*cur%P;}cur = cur*cur%P;}return ret;
}
llong mulinv(llong x) {return quickpow(x,P-2);}
llong comb(llong x,llong y) {return x<0||y<0||x<y ? 0ll : fact[x]*finv[y]%P*finv[x-y]%P;}int main()
{fact[0] = 1ll; for(int i=1; i<=N; i++) fact[i] = fact[i-1]*i%P;finv[N] = quickpow(fact[N],P-2); for(int i=N-1; i>=0; i--) finv[i] = finv[i+1]*(i+1)%P;scanf("%d%d",&n,&m);if((n+m)&1) {printf("0"); return 0;}m = (n+m)>>1;for(int i=1; i<=n; i++) scanf("%d",&a[i]);for(int i=1; i<=n; i++) scanf("%d",&b[i]);sort(a+1,a+n+1); sort(b+1,b+n+1);dp[0][0] = 1ll;for(int i=1; i<=n; i++){int t = lower_bound(b+1,b+n+1,a[i])-b-1;for(int j=0; j<=i; j++){dp[i][j] = dp[i-1][j];if(j>0 && t-j+1>0) {dp[i][j] = (dp[i][j]+dp[i-1][j-1]*(t-j+1))%P;}}}for(int i=0; i<=n; i++) f[i] = dp[n][i]*fact[n-i]%P;llong ans = 0ll;for(int i=m; i<=n; i++){llong tmp = f[i]*comb(i,m);if((i-m)&1) {ans = (ans-tmp+P)%P;}else {ans = (ans+tmp)%P;}}printf("%lld\n",ans);return 0;
}

BZOJ 3622 Luogu P4859 已经没有什么好害怕的了 (容斥原理、DP)相关推荐

  1. UOJ #219 BZOJ 4650 luogu P1117 [NOI2016]优秀的拆分 (后缀数组、ST表)

    UOJ #219 BZOJ 4650 luogu P1117 [NOI2016]优秀的拆分 (后缀数组.ST表) 连NOI Day1T1都不会做...看了题解都写不出来还要抄Claris的代码.. 题 ...

  2. UOJ #131 BZOJ 4199 luogu P2178【NOI2015】品酒大会 (后缀自动机、树形DP)

    UOJ #131 BZOJ 4199 luogu P2178[NOI2015]品酒大会 (后缀自动机.树形DP) 水是水,但是写出了不少问题,因此写一发博客. https://www.luogu.or ...

  3. BZOJ 1500 Luogu P2042 [NOI2005] 维护数列 (Splay)

    BZOJ 1500 Luogu P2042 [NOI2005] 维护数列 (Splay) 手动博客搬家: 本文发表于20180825 00:34:49, 原地址https://blog.csdn.ne ...

  4. BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演)

    BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演) 手动博客搬家:本文发表于20180310 11:46:11, 原地址https://blog.csdn.net/suncongbo/ ...

  5. POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)

    POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn ...

  6. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)

    BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块) 手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csd ...

  7. BZOJ 2152 Luogu 2634——聪聪可可

    BZOJ 2152  Luogu 2634--聪聪可可 题意 求两点之间路径和为3的倍数占的概率(最简) 解题思路与BZOJ1468差不多, 不过本题在计算经过某个点的次数时用了个ans数组, 对路径 ...

  8. bzoj 1179 抢掠计划atm (缩点+有向无环图DP)

    bzoj 1179 抢掠计划atm (缩点+有向无环图DP) 手动博客搬家: 本文发表于20170716 10:58:18, 原地址https://blog.csdn.net/suncongbo/ar ...

  9. Gym 101190D BZOJ 4842 Luogu P6967 LOJ #6071 [NEERC2016]Delight for a Cat (费用流)

    题目链接 (BZOJ) 大人,时代变了 (Gym) https://codeforces.com/gym/101190 (Luogu) https://www.luogu.com.cn/problem ...

最新文章

  1. 企业为什么需要网络流量分析
  2. es文件浏览器怎么用_es文件浏览器电视版下载-es文件浏览器电视tv版下载v4.2.3.4 安卓最新版...
  3. 第2课 贝贝的图形(vhist)-2019-07-11《聪明人的游戏-提高篇》
  4. access 图片存储的格式_Ceph对象存储RGW架构及安装实战
  5. 使用Python音频双通道分离
  6. 无连续重复的随机算法
  7. 一篇极好的Git 总结
  8. 运行JProfiler:ERROR: Invalid license key. Aborting
  9. 数据结构 严蔚敏 4.3.4
  10. python组合数据类型实验报告_Python程序设计实验七:组合数据类型
  11. 移动APP测试用例设计的关注点
  12. 软件项目管理 1.3.敏捷项目管理概念
  13. 推荐:HP大中华区总裁孙振耀退休十五天后九大感言
  14. 计算机在化学中论文3000字,计算机在化学中的应用
  15. 图片鉴黄的原理和应用
  16. 最新计算机台式机小机箱,几款热门台式机主机机箱的参数配置【图文】
  17. github下载release连接失败解决方法 亲测有效
  18. 时光里的魔术手小故事
  19. 技术分享:国民远控向日葵如何通过BBR算法提升远控体验?
  20. 输入目录路径以及名字,能够将该路径下所有文件的属性打印出来,类似ls -l

热门文章

  1. 云炬VB开发笔记 5循环结构
  2. 吴恩达《Machine Learning》精炼笔记 6:关于机器学习的建议
  3. IIR+双向滤波实现系统零相位相移_MATLAB仿真
  4. bash-shell--高级编程
  5. linux创建进程fork函数和vfork函数
  6. C语言中巧妙的使用#和##
  7. 计算机网络核心知识(下)
  8. linux下的系统调用函数到内核函数的追踪
  9. SpringBoot 配置绑定
  10. STM32开发 -- 信号强度CSQ