bzoj3622-已经没有什么好害怕的的了
题意
给出两个长度为 \(n\) 的数列 \(a,b\) ,\(2n\) 个数都互不相同,求有多少种对应方式使得 \(a_i>b_i\) 的个数比 \(a_i<b_i\) 的个数恰好多 \(k\) 。\(n\le 2000\) 。
分析
容易把问题转化成有多少种对应方案使得 \(a_i>b_i\) 的个数恰好多 \(m\) 。这是一个序列上的计数问题,一种经典的思路是分阶段考虑。
首先给 \(a\) 排序,预处理出 \(b\) 中有多少个数比 \(a_i\) 小,记为cnt[i] 。分阶段考虑,设 f[i][j] 表示给 \(a\) 的前 \(i\) 个分配 \(j\) 个小于它们的的方案数。那么有转移:
\]
除了这 \(j\) 个以外其他是随便选的。这就导致了计算重复,所以我们考虑如何减去重复。设 \(g_i\) 表示整个对应中恰好有 \(i\) 个小于它们的,那么有:
\]
这里最妙的方法是,重复我们反过来求。重复的是什么呢?就是随便匹配的过程中得到的那些 \(a_i>b_i\) 的方案。这些方案在 \(g[k],k>i\) 中是包含的!!\(g_k\) 中每一个方案被 \(f[n][i]\) 算多了 \(\binom k i\) 次.
\]
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long giant;
inline char nchar() {
static const int bufl=1<<20;
static char buf[bufl],*a,*b;
return a==b && (b=(a=buf)+fread(buf,1,bufl,stdin),a==b)?EOF:*a++;
}
inline int read() {
int x=0,f=1;
char c=nchar();
for (;!isdigit(c);c=nchar()) if (c=='-') f=-1;
for (;isdigit(c);c=nchar()) x=x*10+c-'0';
return x*f;
}
const int maxn=2e3+1;
const int q=1e9+9;
inline int Plus(int x,int y) {return ((giant)x+(giant)y)%q;}
inline int Sub(int x,int y) {return Plus(x,q-y);}
inline int Multi(int x,int y) {return (giant)x*y%q;}
inline int mi(int x,int y) {
int ret=1;
for (;y;y>>=1,x=Multi(x,x)) if (y&1) ret=Multi(ret,x);
return ret;
}
inline int inv(int x) {return mi(x,q-2);}
int a[maxn],b[maxn],f[maxn],g[maxn],le[maxn],fac[maxn],ifac[maxn];
inline int C(int n,int m) {return Multi(Multi(fac[n],ifac[m]),ifac[n-m]);}
int main() {
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
#endif
int n=read();
int k=read();
if ((n+k)&1) puts("0"),exit(0);
fac[0]=ifac[0]=fac[1]=ifac[1]=1;;
for (int i=2;i<=n;++i) ifac[i]=inv(fac[i]=Multi(fac[i-1],i));
for (int i=1;i<=n;++i) a[i]=read();
for (int i=1;i<=n;++i) b[i]=read();
sort(a+1,a+n+1),sort(b+1,b+n+1);
for (int i=1,j=0;i<=n;++i) {
for (;j<n && b[j+1]<a[i];++j);
le[i]=j;
}
f[0]=1;
for (int i=1;i<=n;++i) for (int j=i;j;--j) f[j]=Plus(f[j],Multi(f[j-1],max(le[i]-j+1,0)));
g[n]=f[n];
for (int i=n-1;i;--i) {
int &gi=g[i]=0;
for (int j=i+1;j<=n;++j) gi=Plus(gi,Multi(g[j],C(j,i)));
gi=Sub(Multi(f[i],fac[n-i]),gi);
}
printf("%d\n",g[(n+k)>>1]);
return 0;
}
bzoj3622-已经没有什么好害怕的的了的更多相关文章
- [bzoj3622]已经没有什么好害怕的了_动态规划_容斥原理
bzoj-3622 已经没有什么好害怕的了 题目大意: 数据范围:$1\le n \le 2000$ , $0\le k\le n$. 想法: 首先,不难求出药片比糖果小的组数. 紧接着,我开始的想法 ...
- bzoj3622已经没有什么好害怕的了
bzoj3622已经没有什么好害怕的了 题意: 给n个数Ai,n个数Bi,将Ai中的数与Bi中的数配对,求配对Ai比Bi大的比Bi比Ai大的恰好有k组的方案数.n,k≤2000 题解: 蒟蒻太弱了只能 ...
- [BZOJ3622]已经没有什么好害怕的了(容斥DP)
给定两个数组a[n]与b[n](数全不相等),两两配对,求“a比b大”的数对比“b比a大”的数对个数多k的配对方案数. 据说做了这题就没什么题好害怕的了,但感觉实际上这是一个套路题,只是很难想到. 首 ...
- BZOJ3622 已经没有什么好害怕的了 【dp + 二项式反演】
题目链接 BZOJ3622 题解 既已开题 那就已经没有什么好害怕的了 由题目中奇怪的条件我们可以特判掉\(n - k\)为奇数时答案为\(0\) 否则我们要求的就是糖果大于药片恰好有\(\frac{ ...
- bzoj3622已经没有什么好害怕的了 dp+组合+容斥(?)
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1033 Solved: 480[Submit][Status][ ...
- BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
原文链接https://www.cnblogs.com/zhouzhendong/p/9276479.html 题目传送门 - BZOJ3622 题意 给定两个序列 $a,b$ ,各包含 $n$ 个数 ...
- BZOJ3622 已经没有什么好害怕的了(动态规划+容斥原理)
显然可以转化为一个阶梯状01矩阵每行每列取一个使权值和为k的方案数.直接做不可做,考虑设f[i][j]为前i行权值和至少为j,即在其中固定了j行选1的方案数.设第i行从1~a[i]列都是1且a[i]+ ...
- BZOJ3622 已经没有什么好害怕的了
Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output 4 HINT 输入的2*n个数字保证全不相 ...
- 【BZOJ3622】已经没什么好害怕的了 容斥原理+dp
Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output 4 HINT 输入的2*n个数字保证全不相 ...
- 洛谷 P4859 && BZOJ3622: 已经没有什么好害怕的了
题目描述 给出 \(n\) 个数 \(a_i\) ,以及 \(n\) 个数 \(b_i\) ,要求两两配对使得 \(a>b\) 的对数减去 \(a<b\) 的对数等于 \(k\) . ...
随机推荐
- 20155310马英林 实验2 Windows口令破解
实 验 报 告 实验名称: 实验二 口令破解 姓名:马英林 学号: 20155310 班级: 1553 日期: 2017.10.24 一. 实验环境 •系统环境:Windows •网络环境:交换网络结 ...
- 见到Unicode、GB2312、GBK 、ANSI、Ascii、DBCS、BIG5、UTF这一堆名词你是否犯晕?请看转载的好文
作者:于洋链接:https://www.zhihu.com/question/23374078/answer/69732605来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- 深入浅出之-route命令实战使用指南
本博文的视频讲解已发布:http://oldboy.blog.51cto.com/2561410/1119453 缘起:本文为老男孩linux培训第七次课前考试题及参考答案,有朋友在看完http:// ...
- 自动化运维工具saltstack02 -- 之SaltStack的配置管理
SaltStack的配置管理 1.配置管理说明 配置管理,顾名思义及配置与管理, salt-master的配置文件编写格式之YAML语法说明: 数据的结构通过缩进来表示,每一级用两个空格来表示缩进,如 ...
- 【xml_Class、xmlElementNode_Class 类】使用说明
xml_Class.xmlElementNode_Class这两个类是针对XML相关操作的类. 1.xml_Class类是针对XML文档操作的类 目录: 类型 原型 参数 返回 说明 Sub Sub ...
- HP Vitrual Connect 配置快速参考
使用任意浏览器,在地址栏输入VC的管理地址(如果不知道VC的管理地址请从OA中进入) 输入用户名和密码登入VC,验证成功后将进入VM的配置向导 点击"Next"继续,将先进行Dom ...
- JAVA学习笔记--接口
一.抽象类和抽象方法 在谈论接口之前,我们先了解一下抽象类和抽象方法.我们知道,在继承结构中,越往下继承,类会变得越来越明确和具体,而往上回溯,越往上,类会变得越抽象和通用.我们有时候可能会需要这样一 ...
- [CF1137]Museums Tour
link \(\text{Description:}\) 一个国家有 \(n\) 个城市,\(m\) 条有向道路组成.在这个国家一个星期有 \(d\) 天,每个城市有一个博物馆. 有个旅行团在城市 \ ...
- eclipse提示找不到dubbo.xsb报错
需要下载一个dubbo.xsb文件到本地,并在eclipse中配置 下载路径:下载链接 下载方法: a).带开链接 b).点击[Raw]按钮 c). 右键->另存为 在eclipse中配置xsb ...
- 如何通俗理解贝叶斯推断与beta分布?
有一枚硬币(不知道它是否公平),假如抛了三次,三次都是“花”: 能够说明它两面都是“花”吗? 1 贝叶斯推断 按照传统的算法,抛了三次得到三次“花”,那么“花”的概率应该是: 但是抛三次实在太少了,完 ...