BZOJ - Problem 3622 - 已经没有什么好害怕的了
题意:
给定两个序列$a$和$b$,让它们进行匹配,求出使得$a_i > b_j$的个数比$a_i < b_j$的个数恰好多$k$,求这样的匹配方法数
题解:
这题的各种表示有一点相似又截然不同,很容易混淆。
直接求恰好满足$k$对不好求,所以先放宽条件,这样子有利于构造动规方程。
先用$f_{i, j}$表示在前$i$个中,至少选择$j$个$a > b$的匹配的方案数(是匹配的方案数,只关心匹配那一部分,不关心其它的部分),容易得到动规方程:
ƒi,j = ƒi - 1,j + (Lasti - (j - 1)) * ƒi - 1,j - 1
其中$Last_i$表示第一个小于$a_i$的$b_j$。
$(Last_i - (j - 1))$表示原有$Last_i$种选择,被选走了$j - 1$种,此时因为是“至少”,所以其它的匹配是不用管的。
那么现在考虑求出恰好为$k$的方案数。
首先令$g_i$表示前$N$个$a$中,满足至少有$i$个$a > b$的方案数,那么
gi = ƒN,j * (N - i) !
这时候才考虑了其它的部分,所以需要乘上阶乘。
再令$f'_i$表示恰好满足$i$组的方案数,那么考虑容斥,在所有的$g_j$中,每个$f'_i (i > j)$被算了$C_i^j$次,因为不考虑其它的,仅$i$个已匹配好的任意取$j$个,其它的随便排,正好被$g_j$囊括,当然这一部分是多余的,所以
ƒ'i = gj - Cj, i * ƒ'j (j > i)
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> #define MOD 1000000009 using namespace std; typedef long long LL; const int MAXN = + ; LL g[MAXN][MAXN]; LL f[MAXN]= {}; LL fac[MAXN];
LL C[MAXN][MAXN]; int N, K; int Candy[MAXN], Pill[MAXN]; int Last[MAXN]= {}; void Preparation () {
fac[] = ;
for (int i = ; i <= N; i ++)
fac[i] = fac[i - ] * i % MOD; for (int i = ; i <= N; i ++)
C[i][] = ;
for (int i = ; i <= N; i ++)
for (int j = ; j <= i; j ++)
C[i][j] = (C[i - ][j] + C[i - ][j - ]) % MOD;
} int main () {
scanf ("%d%d", & N, & K); Preparation (); for (int i = ; i <= N; i ++)
scanf ("%d", & Candy[i]);
for (int i = ; i <= N; i ++)
scanf ("%d", & Pill[i]); sort (Candy + , Candy + N + );
sort (Pill + , Pill + N + ); for (int i = ; i <= N; i ++)
for (int j = N; j >= ; j --)
if (Pill[j] < Candy[i]) {
Last[i] = j;
break;
} for (int i = ; i <= N; i ++)
g[i][] = ;
for (int i = ; i <= N; i ++)
for (int j = ; j <= i; j ++)
g[i][j] = (g[i - ][j] + (Last[i] - j + ) * g[i - ][j - ] % MOD) % MOD; for (int i = N; i >= ; i --) {
f[i] = g[N][i] * fac[N - i] % MOD;
for (int j = i + ; j <= N; j ++)
f[i] = ((f[i] - C[j][i] * f[j] % MOD) % MOD + MOD) % MOD;
} printf ("%lld\n", f[(N + K) >> ]); return ;
} /*
4 2
5 35 15 45
40 20 10 30
*/
BZOJ - Problem 3622 - 已经没有什么好害怕的了的更多相关文章
- BZOJ 3622 : 已经没有什么好害怕的了(dp + 广义容斥原理)
今天没听懂 h10 的讲课 但已经没有什么好害怕的了 题意 给你两个序列 \(a,b\) 每个序列共 \(n\) 个数 , 数之间两两不同 问 \(a\) 与 \(b\) 之间有多少配对方案 使得 \ ...
- BZOJ 3622: 已经没有什么好害怕的了 [容斥原理 DP]
3622: 已经没有什么好害怕的了 题意:和我签订契约,成为魔法少女吧 真·题意:零食魔女夏洛特的结界里有糖果a和药片b各n个,两两配对,a>b的配对比b>a的配对多k个学姐就可能获胜,求 ...
- bzoj 3622 已经没有什么好害怕的了 类似容斥,dp
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1213 Solved: 576[Submit][Status][ ...
- 【BZOJ 3622】3622: 已经没有什么好害怕的了(DP+容斥原理)
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 683 Solved: 328 Description Input ...
- ●BZOJ 3622 已经没有什么好害怕的了
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3622 题解: 容斥,dp1).可以求出需要多少对"糖果>药片"(K ...
- bzoj 3622 已经没有什么好害怕的了——二项式反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3622 令 f[i] 表示钦定 i 对 a[ ]>b[ ] 的关系的方案数:g[i] 表 ...
- [BZOJ 3622]已经没有什么好害怕的了
世萌萌王都拿到了,已经没有什么好害怕的了—— (作死) 笑看哪里都有学姐,真是不知说什么好喵~ 话说此题是不是输 0 能骗不少分啊,不然若学姐赢了,那么有头的学姐还能叫学姐吗? (作大死) 这 ...
- 解题:BZOJ 3622 已经没有什么好害怕的了·
题面 用来学习二项式反演的题目 大于等于/小于等于 反演出 恰好等于 设前者为f(n),后者为g(n),则有$f(n)=\sum\limits_{i=0}^nC_n^ig(n)<->g(n ...
- BZOJ 3622: 已经没有什么好害怕的了(二项式反演)
传送门 解题思路 首先将\(a\),\(b\)排序,然后可以算出\(t(i)\),表示\(a(i)\)比多少个\(b(i)\)大,根据容斥套路,设\(f(k)\)表示恰好有\(k\)个\(a(i)\) ...
随机推荐
- Class类是什么? Class.forName()是干什么的?
Class类概念 Class类用来描述一个类的结构,比如描述一个类有哪些成员,有哪些方法等.有多种方法可以获取一个类对应的Class类实例,比如: //第一种方式获取描述Dog类结构的Class类实例 ...
- [您有新的未分配科技点]数位DP:从板子到基础(例题 bzoj1026 windy数 bzoj3131 淘金)
只会统计数位个数或者某种”符合简单规律”的数并不够……我们需要更多的套路和应用 数位dp中常用的思想是“分类讨论”思想.下面我们就看一道典型的分类讨论例题 1026: [SCOI2009]windy数 ...
- 使用expect实现自动登录的脚本
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ######## ...
- MyBatis openSession(),close(),和commit() 底层代码剖析
一:MyBatis工具类 中openSession到底做了什么? Mybatis工具类 private static final String RESOURCE = "mybatis-con ...
- [CodeVs1515]跳(lucas定理+费马小定理)
嘿嘿嘿好久没写数学题了,偶尔看到一道写一写... 题目大意:一个(n+1)*(m+1)[0<=n, m<=10^12,n*m<=10^12]的矩阵,C(0,0)=1,C(x,y)=C ...
- codeforces 217E 【Alien DNA】
倒序考虑每一个操作,对于一个操作$[l, r]$,他产生的影响区间将是$[r+1,r + r + l - 1]$,如果$r+l-1>K$的话,$K$之后的区间我们是不关心的. 暴力扫描这个区间 ...
- C# Emgu CV学习笔记二之图像读写的两种方法
http://blog.csdn.net/marvinhong/article/details/6800450 图像显示在控件loadPictureBox上 方法一 //读取图像001.jpg Int ...
- phpstorm 自定义属性没语法提示的问题
在右侧Options勾选上Custom HTML tag attributes,并且在下面的输入框输入自定义属性列表,逗号分隔.
- Redis 为什么用跳表而不用平衡树
Redis 为什么用跳表而不用平衡树? 本文是<Redis内部数据结构详解>系列的第六篇.在本文中,我们围绕一个Redis的内部数据结构--skiplist展开讨论. Redis里面使用s ...
- 全表 or 索引
这一篇文章证实了以前对MySQL优化程序的工作原理. MySQL就像一个人一样,总是聪明的去选择当前最快的方式去查询,而不是像Oracle数据那样死板地根据规格去查询. 查询的要求在于快.而对于数据库 ...