[BZOJ3622] 已经没有什么好害怕的了 题解
发现难以维护差值,于是令 \(K=\frac{n+k}2\),这样就把问题转化为了“糖果”比“药片”大的组数为 \(K\) 的情况有多少种。
设 \(dp_{i,j}\) 表示我们用前 \(i\) 个“糖果”和“药片”配对,至少有 \(j\) 组“糖果”比“药片”大,有多少种情况;\(c_i\) 表示有多少个“药片”比第 \(i\) 个糖果小。
我们对“糖果”和“药片”分别排序,显然有:
\]
然后就是简单二项式反演了。设 \(g_i\) 表示恰好只有 \(i\) 组“糖果”比“药片”大,那么就有:
\]
时间复杂度 \(O(n^2)\)。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2005,p=1e9+9;
int n,C[N][N],jc[N],ans;
int k,a[N],b[N],dp[N][N];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>k,jc[0]=1;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
cin>>b[i],jc[i]=jc[i-1]*i%p;
if((n+k)%p==0) cout<<0,exit(0);
k=(n+k)/2,dp[0][0]=1;
sort(a+1,a+n+1),sort(b+1,b+n+1);
for(int i=0;i<=n;C[i++][0]=1)
for(int j=1;j<=min(i,k);j++)
C[i][j]=(C[i-1][j-1]+C[i-1][j])%p;
for(int i=1,sum=0;i<=n;dp[i++][0]=1){
while(sum<n&&b[sum+1]<a[i]) sum++;
for(int j=1;j<=min(i,sum);j++)
dp[i][j]=(dp[i-1][j]+dp[i-1][j-1]*(sum-j+1))%p;
}for(int i=k,opt=1;i<=n;i++,opt=-opt)
ans=(ans+opt*C[i][k]*jc[n-i]%p*dp[n][i])%p;
cout<<(ans+p)%p;
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\) . ...
随机推荐
- Python 学习记录(3)
数据 主要是对Pandas相关的数据帧等做处理和一定的可视化 Pandas对数据帧各列的运算 import seaborn as sns import pandas as pd #从Seaborn 当 ...
- CLZ银行问题
CLZ银行问题 题目描述 CLZ 银行只有两个接待窗口,VIP 窗口和普通窗口,VIP用户进入 VIP 窗口排队,剩下的进入普通窗口排队.现有M 次操作,操作有四种类型,如下: IN name V:表 ...
- 《JavaScript 模式》读书笔记(8)— DOM和浏览器模式1
在本书的前面章节中,我们主要集中关注于核心JavaScript(ECMAScript),而并没有太多关注在浏览器中使用JavaScript的模式.本章将探索一些浏览器特定的模式,因为浏览器是使用Jav ...
- 09C++选择结构(3)——教学
一.求3个整数中最小值 (第20课 初识算法) 题目:输入三个整数,表示梨的重量,输出最小的数. 方法1:经过三次两两比较,得出最小值. a<=b && a<=c min= ...
- shell 下 exec,source,.,bash和sh以及export得区别
exec执行命令时,不会启用新的shell进程. source和 .也不会启用新的shell进程,在当前shell中执行,设定的局部变量在执行完命令后仍然有效. bash或sh执行时,会另起一个子 ...
- sed 指定行后或行前插入
sed 功能非常强大,这里主要列出一些工作中常用到的举例,以后再追加 示例文本 example.cfg Config = { a = 1, b = 1024, c = { ErrLevel = 4, ...
- Spring Boot轻松理解动态注入,删除bean
原文地址:http://412887952-qq-com.iteye.com/blog/2348445 我们通过getBean来获得对象,但这些对象都是事先定义好的,我们有时候要在程序中动态的加入 ...
- Python+Selenium自动搜索基金业协会指定企业名单,爬虫抓取指定信息并保存到数据库
Python+Selenium自动搜索基金业协会指定企业名单,抓取指定信息并保存到数据库.网址https://gs.amac.org.cn/amac-infodisc/res/pof/manager/ ...
- Visual Studio Code启动时总是提示“Code安装似乎损坏。请重新安装。”、标题栏显示“不受支持”等信息的解决办法
我的VSCode一直提示"Code安装似乎损坏.请重新安装."同时标题栏显示"不受支持"就像这样: 反思了一下,应该是我安装的background插件,把vsc ...
- Solution Set - “女孩是瑰宝我心动一丝不苟”
目录 0.「NOI Simu.」静态顶树 1.「NOI Simu.」祖先 2.「NOI Simu.」睡眠 3.「JLOI 2008」「洛谷 P3881」CODES 4.「ARC 163A」Divide ...