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\) . ...
随机推荐
- 20145209刘一阳《网络对抗》Exp9 Web安全基础实践
20145209刘一阳<网络对抗>Exp9 Web安全基础实践 基础问题回答 1.SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求 ...
- 成都Uber优步司机奖励政策(4月14日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 验证码示例代码演示——以php为例
运行 · 修改index.php(图片验证码的生成示例) [html] view plain copy initNECaptcha({ captchaId: 'YOUR_CAPTCHA_ID', // ...
- Maven学习(二)-----Maven启用代理访问
Maven启用代理访问 如果你的公司正在建立一个防火墙,并使用HTTP代理服务器来阻止用户直接连接到互联网.如果您使用代理,Maven将无法下载任何依赖. 为了使它工作,你必须声明在 Maven 的配 ...
- Redis的事物
Redis的事物 Redis 事物常用命令 multi标记一个事物块的开始 exec:执行所有事物块内的命令 discard: 取消事物,放弃执行事物块的所有命令 watch key [k ...
- java nio实现文件复制
public class TransferTo { public static void main(String[] args) throws Exception { FileChannel in = ...
- hdu2187悼念512汶川大地震遇难同胞——老人是真饿了(贪心 简单题)
传送门 简单题 #include<bits/stdc++.h> using namespace std; struct node { double dan,weight; }a[]; bo ...
- xxl_job springboot改造
代码地址:https://gitee.com/sharehappy/xxl_job_springboot 官方文档:https://github.com/xuxueli/xxl-job/blob/ma ...
- Linux命令之tar命令
[root@linux ~]# tar [-cxtzjvfpPN] 文件与目录 .... 参数: -c :建立一个压缩文件的参数指令(create 的意思): -x :解开一个压缩文件的参数指令! - ...
- RetinaNet 迁移学习到自标数据集
Keras-RetinaNet 在自标数据集 alidq 上训练 detection model RetinaNet 模型部署与环境配置 参考README 数据预处理 数据统计信息: 类别:gun1, ...