【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\) . ...
随机推荐
- Maven_1 安装配置
所需工具 : JDK 1.8 Maven 3.3.9 Windows 7 下载Maven 3.3.9 http://maven.apache.org/download.cgi 首先要先安装JDK. ...
- maven教程5(聚合工程)
所谓聚合项目,实际上就是对项目分模块,互联网项目一般来说按照业务分(订单模块.VIP模块.支付模块.CMS模块...),传统的软件项目,大多采用分层的方式(Dao.Serivce.Controller ...
- C# DataGrid 用法---极速入门测试
目标: 新手编程,只求DataGrid能运行起来,更多功能留在后面探讨. 步骤: 1.新建WPF文档 插入DataGrid控件. <Window x:Class="OASevl.Mai ...
- [AHOI2008] 紧急集合
Description 欢乐岛上有个非常好玩的游戏,叫做"紧急集合".在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个等待点,且通过这些道路可以走遍所有的等 ...
- using的几种用法
1.using指令.using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间 例如:using System; 一般都会出现在*.cs中. 2.using ...
- Jackson解析XML
使用Jackson maven项目的pom.xml依赖 <dependency> <groupId>com.fasterxml.jackson.dataformat</g ...
- Ado.net怎么执行存储过程?
与ADO.Net执行SQL语句的地方只有两点不同1.使用存储过程名代替sql语句2. 使用查询对象SqlCommand,需配置一个CommandType属性 存储过程的执行语法-> exec 存 ...
- CMD下进入MYSQL的命令
CMD下进入MYSQL的命令 mysql -h localhost -u root -p 切到MYSQL的bin目录下,输入上面命令,回车 然后输入密码 回车
- Linux Centos下安装jdk
1.准备工作 https://www.cnblogs.com/dddyyy/p/9746942.html 上面这篇博客讲了如何安装linux 你想安装的jdk(对应版本的jdk) 连接Linux的软件 ...
- CSS水平居中的三种方法
CSS中经常会用到元素居中,那么今天我为大家分享几种水平居中的方法,下面代码都可以达到同样的居中效果,来不及解释了,快上马(码): 一.margin : 0 auto; <head> &l ...