【BZOJ3622】已经没有什么好害怕的了
Description
已经使 Modoka 有签订契约, 和自己一起战斗的想法后 , Mami 忽然感到自己不再是孤单一人了呢.
于是, 之前的谨慎的战斗作风也消失了 , 在对 Charlotte 的傀儡使用终曲——Tiro Finale后 , Mami 面临着即将被 Charlotte 的本体吃掉的局面.
这时, 已经多次面对过 Charlotte 的 Homura 告诉了学 OI 的你这样一个性质——Charlotte的结界中有两种具有能量的元素——一种是“糖果” , 另一种是“药片” , 每种各有 n 个. 在Charlotte 发动进攻前, “糖果”和“药片”会两两配对,若恰好“糖果”比“药片”能量大的组数比“药片”比“糖果”能量大的组数多 k 组, 则在这种局面下, Charlotte 的攻击会丢失,从而 Mami 仍有消灭 Charlotte 的可能. 你必须根据 Homura 告诉你的“糖果”和“药片”的能量的信息迅速告诉 Homura 这种情况的个数.
Input
第一行两个整数 n, k, 含义如题目描述.
接着第二行 n 个整数, 第 i 个数表示第 i 个糖果的能量.
第三行 n 个整数, 第 j 个数表示第 j 个药片 的能量.
Output
一个整数, 表示消灭 Charlotte 的情况个数.
答案可能会很大, 所以 mod (1 0^9 + 9)
Sample Input
4 2
5 35 15 45
40 20 10 30
Sample Output
4
我们先将糖果和药片分别排序,然后设t[i]表示比第i个糖果能量小的编号最大的药片的编号。
设表示前i个糖果,已经配对了j组“糖果>药片”的方案数。
。
然后剩下的糖果在随意分配,也就是说。
然后我们的答案就是糖果>药片的组数刚好为(n+k)/2的方案数。
因为f[n][i]表示的是至少有i组糖果>药片的方案数,所以我们要容斥。设容斥系数为g[i],则,然后答案就是
。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<ctime>
#define ll long long
#define N 2005
#define mod 1000000009
using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}
int n;
int k;
int a[N],b[N];
int t[N];
ll f[N][N],ans,fac[N];
ll g[N],c[N][N];
int main() {
n=Get(),k=Get();
for(int i=1;i<=n;i++) a[i]=Get();
for(int i=1;i<=n;i++) b[i]=Get();
sort(a+1,a+1+n);
sort(b+1,b+1+n);
if((n-k)&1) {cout<<0;return 0;}
k=(n+k)/2;
int tem=0;
for(int i=1;i<=n;i++) {
while(tem<n&&a[i]>b[tem+1]) tem++;
t[i]=tem;
}
f[0][0]=1;
for(int i=1;i<=n;i++) {
f[i][0]=1;
for(int j=1;j<=n;j++) {
f[i][j]=f[i-1][j];
if(t[i]>=j) {
(f[i][j]+=f[i-1][j-1]*(t[i]-j+1)%mod)%=mod;
}
}
}
fac[0]=1;
for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%mod;
for(int i=0;i<=n;i++) {
f[n][i]=f[n][i]*fac[n-i]%mod;
}
c[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<=i;j++)
c[i][j]=(!j||i==j)?1:(c[i-1][j-1]+c[i-1][j])%mod;
g[k]=1;
for(int i=k+1;i<=n;i++) {
for(int j=k;j<i;j++) {
g[i]=(g[i]-g[j]*c[i][j]%mod+mod)%mod;
}
}
for(int i=k;i<=n;i++) {
ans=(ans+g[i]*f[n][i]%mod+mod)%mod;
}
cout<<ans;
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文件处理b模式
执行环境:windows+Python3.51.rb模式,从文件中读取内容,得到的是bytes类型 因为我们使用的是b模式,所以在open函数中不能指定编码格式,所以打印出来的格式的二进制的格式,而我 ...
- JavaScript之使用AJAX(适合初学者)
网上关于AJAX的教程和分享层出不穷,现实生活中关于AJAX的书籍也是琳琅满目,然而太多的选择容易令人眼花缭乱,不好取舍.事实是,一般的教程或书籍都不会讲Web服务器的搭建,因此,对于初学者(比如 ...
- Abp中自定义Exception的HttpStatusCode
Abp中在新版本中,抛出的异常(比如:UserFriendlyException)通过AjaxResponse封装后返回的时候,HttpStatusCode默认指定成了500. 对于一些默认封装好的处 ...
- AJAX 基本结构 数据加载
AJAX -- 网页数据异步加载 .ashx 一般处理程序 json 数据格式,在不同的语言之间传递数据 对象格式: "{"key":"value& ...
- 4.数码相框-freetype多行显示,居中显示
本章主要内容如下: 1)多行显示 2)居中显示 在上章3.数码相框-通过freetype库实现矢量显示里,我们使用矢量坐标时,该坐标仅仅在原点位置处,所以文字有可能会超出坐标,如下图所示: 既然超出了 ...
- ArrayList和LinkedList的区别以及优缺点
作用 ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用.他们都可以对元素的增删改查进行操作. 对于ArrayList,它在集合的末尾删除或添加元素所用的 ...
- maven配置之:<distributionManagement>snapshot快照库和release发布库
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...
- Cylinder Candy(积分+体积+表面积+旋转体)
Cylinder Candy Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Edward the confectioner is ...
- 解决element-ui的el-select组件文字超过宽度时不出现横向滚动条问题
我用的element-ui是V1.4.3. 目前遇到一个问题,在用el-select组件的时候,当选项的内容很长的时候,会撑开下拉菜单的宽度,这样影响美观.具体如下图所示: 解决这个问题的思路:设置下 ...
- 前端整理——Vue部分
(1)Vue的生命周期 1)创建vue实例,初始化生命周期钩子函数 2)数据检测及方法和计算属性代理.在数据检测和初始化数据之前调用beforeCreated(),这时还获取不到props或者data ...