题意:

  给定两个序列$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 - 已经没有什么好害怕的了的更多相关文章

  1. BZOJ 3622 : 已经没有什么好害怕的了(dp + 广义容斥原理)

    今天没听懂 h10 的讲课 但已经没有什么好害怕的了 题意 给你两个序列 \(a,b\) 每个序列共 \(n\) 个数 , 数之间两两不同 问 \(a\) 与 \(b\) 之间有多少配对方案 使得 \ ...

  2. BZOJ 3622: 已经没有什么好害怕的了 [容斥原理 DP]

    3622: 已经没有什么好害怕的了 题意:和我签订契约,成为魔法少女吧 真·题意:零食魔女夏洛特的结界里有糖果a和药片b各n个,两两配对,a>b的配对比b>a的配对多k个学姐就可能获胜,求 ...

  3. bzoj 3622 已经没有什么好害怕的了 类似容斥,dp

    3622: 已经没有什么好害怕的了 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1213  Solved: 576[Submit][Status][ ...

  4. 【BZOJ 3622】3622: 已经没有什么好害怕的了(DP+容斥原理)

    3622: 已经没有什么好害怕的了 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 683  Solved: 328 Description Input ...

  5. ●BZOJ 3622 已经没有什么好害怕的了

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3622 题解: 容斥,dp1).可以求出需要多少对"糖果>药片"(K ...

  6. bzoj 3622 已经没有什么好害怕的了——二项式反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3622 令 f[i] 表示钦定 i 对 a[ ]>b[ ] 的关系的方案数:g[i] 表 ...

  7. [BZOJ 3622]已经没有什么好害怕的了

    世萌萌王都拿到了,已经没有什么好害怕的了——    (作死) 笑看哪里都有学姐,真是不知说什么好喵~ 话说此题是不是输 0 能骗不少分啊,不然若学姐赢了,那么有头的学姐还能叫学姐吗?  (作大死) 这 ...

  8. 解题:BZOJ 3622 已经没有什么好害怕的了·

    题面 用来学习二项式反演的题目 大于等于/小于等于 反演出 恰好等于 设前者为f(n),后者为g(n),则有$f(n)=\sum\limits_{i=0}^nC_n^ig(n)<->g(n ...

  9. BZOJ 3622: 已经没有什么好害怕的了(二项式反演)

    传送门 解题思路 首先将\(a\),\(b\)排序,然后可以算出\(t(i)\),表示\(a(i)\)比多少个\(b(i)\)大,根据容斥套路,设\(f(k)\)表示恰好有\(k\)个\(a(i)\) ...

随机推荐

  1. 【转】小心stringstream.str()字符串用法的陷阱

    --------------------- 作者:心中那自由的世界 来源:CSDN 原文:https://blog.csdn.net/119365374/article/details/7744678 ...

  2. 用户缓冲式I/O

    2018-08-05 (星期日)缓冲式I/O    所有磁盘操作都是按照块来进行的,因此,若所送出的I/O请求,其对齐块便捷为实际块大小的整数倍,则可以优化I/O的性能.    读取操作需要进行的系统 ...

  3. 解决:LNMP架构下访问php页面出现500错误

    默认情况下,如果被访问的php脚本中包含语法错误,服务器会返回一个空的“200 ok”页面 在php.ini中的fastcgi.error_header选项允许在这种情况下产生一个HTTP错误码 以使 ...

  4. 如何设置eclipse格式化xml代码时不自动换行

    如何设置eclipse格式化代码时不自动换行 2015年12月23日 09:08:36 qq_20889581 阅读数:3770 标签: eclipse格式化android 更多 个人分类: Ecli ...

  5. P1801 黑匣子_NOI导刊2010提高(06)

    P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...

  6. 替换换行符:回车换行CR/LF

    windows采用回车+换行CR/LF表示下一行,UNIX/Linux使用换行符LF表示下一行,MAC OS系统使用用回车符CR表示下一行. CR使用符号'\r'表示, ASCII码是13: LF使用 ...

  7. struts2的action中@Autowired注入为null的解决方案

    今天遇到类似问题,记录下来以便以后查阅: @Aspect作用于action,致使action中的@Autowired注入为null的解决方案,以下三种任选一种: 1.去掉@Autowired,改用se ...

  8. bzoj 2502 清理雪道 (有源汇上下界最小流)

    2502: 清理雪道 Time Limit: 10 Sec  Memory Limit: 128 MB Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场 ...

  9. HDU 5145 分块 莫队

    给定n个数,q个询问[l,r]区间,每次询问该区间的全排列多少种. 数值都是30000规模 首先考虑计算全排列,由于有同种元素存在,相当于每次在len=r-l+1长度的空格随意放入某种元素即$\bin ...

  10. excel表格添加固定宽高的图片

    import xlsxwriter,xlrd import glob #打开excel文件 data=xlrd.open_workbook('优秀创意库-20180725.xlsx') #获取第一张工 ...