Description

Input

Output

Sample Input

4 2
5 35 15 45
40 20 10 30

Sample Output

4

HINT

输入的2*n个数字保证全不相同。

还有输入应该是第二行是糖果,第三行是药片
首先$a_i>b_i$的情况数:
$k=\frac{n+k}{2}$
如果不能整除则无解
先按a,b排序
预处理出$l[i]$,表示$a_i$大于$b_j$的最大j
这样设f[i][j]表示当前a序列第i个数,有j组$a>b$的方案
使$a_i>b$有$l[i]$种方案,但是前面已经用了j-1
所以$f[i][j]=f[i-1][j]+f[i-1][j-1]*(l[i]-j+1)$
这样求出来的是“至少”有j对的方案数,而我们需要的是“恰好”有k对的方案数。
所以容斥
$ans=\sum_{i=k}^{n}(-1)^{i-k}*f[n][i]*C_i^{k}*(n-i)!$
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long lol;
int a[],b[],n,k,Mod=1e9+,l[];
lol f[][],C[][],fac[],ans;
int main()
{int i,j;
cin>>n>>k;
if ((n+k)&)
{
cout<<;
return ;
}
k=(n+k)/;
fac[]=;
for (i=;i<=n;i++)
fac[i]=1ll*fac[i-]*i%Mod;
for (i=;i<=n;i++)
{
C[i][]=;
for (j=;j<=i;j++)
  C[i][j]=(C[i-][j-]+C[i-][j])%Mod;
}
for (i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
for (i=;i<=n;i++)
{
scanf("%d",&b[i]);
}
sort(a+,a+n+);sort(b+,b+n+);
for (i=;i<=n;i++)
{
for (j=;j<=n;j++)
  if (a[i]>b[j]) l[i]++;
  else break;
}
for (i=;i<=n;i++)
{
f[i][]=;
for (j=;j<=i;j++)
  {
  f[i][j]=(f[i][j]+1ll*(l[i]-(j-))*f[i-][j-]%Mod)%Mod;
  f[i][j]=(f[i][j]+f[i-][j])%Mod;
  }
}
for (i=k;i<=n;i++)
{
if ((i-k)%==)
  ans+=1ll*f[n][i]*C[i][k]%Mod*fac[n-i]%Mod,ans%=Mod;
else ans-=1ll*f[n][i]*C[i][k]%Mod*fac[n-i]%Mod,ans=(ans+Mod)%Mod;
}
cout<<ans;
}

BZOJ3622 已经没有什么好害怕的了的更多相关文章

  1. [bzoj3622]已经没有什么好害怕的了_动态规划_容斥原理

    bzoj-3622 已经没有什么好害怕的了 题目大意: 数据范围:$1\le n \le 2000$ , $0\le k\le n$. 想法: 首先,不难求出药片比糖果小的组数. 紧接着,我开始的想法 ...

  2. bzoj3622已经没有什么好害怕的了

    bzoj3622已经没有什么好害怕的了 题意: 给n个数Ai,n个数Bi,将Ai中的数与Bi中的数配对,求配对Ai比Bi大的比Bi比Ai大的恰好有k组的方案数.n,k≤2000 题解: 蒟蒻太弱了只能 ...

  3. [BZOJ3622]已经没有什么好害怕的了(容斥DP)

    给定两个数组a[n]与b[n](数全不相等),两两配对,求“a比b大”的数对比“b比a大”的数对个数多k的配对方案数. 据说做了这题就没什么题好害怕的了,但感觉实际上这是一个套路题,只是很难想到. 首 ...

  4. BZOJ3622 已经没有什么好害怕的了 【dp + 二项式反演】

    题目链接 BZOJ3622 题解 既已开题 那就已经没有什么好害怕的了 由题目中奇怪的条件我们可以特判掉\(n - k\)为奇数时答案为\(0\) 否则我们要求的就是糖果大于药片恰好有\(\frac{ ...

  5. bzoj3622已经没有什么好害怕的了 dp+组合+容斥(?)

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

  6. BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学

    原文链接https://www.cnblogs.com/zhouzhendong/p/9276479.html 题目传送门 - BZOJ3622 题意 给定两个序列 $a,b$ ,各包含 $n$ 个数 ...

  7. BZOJ3622 已经没有什么好害怕的了(动态规划+容斥原理)

    显然可以转化为一个阶梯状01矩阵每行每列取一个使权值和为k的方案数.直接做不可做,考虑设f[i][j]为前i行权值和至少为j,即在其中固定了j行选1的方案数.设第i行从1~a[i]列都是1且a[i]+ ...

  8. 【BZOJ3622】已经没什么好害怕的了 容斥原理+dp

    Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output 4 HINT 输入的2*n个数字保证全不相 ...

  9. 洛谷 P4859 && BZOJ3622: 已经没有什么好害怕的了

    题目描述 给出 \(n\) 个数 \(a_i\)​ ,以及 \(n\) 个数 \(b_i\)​ ,要求两两配对使得 \(a>b\) 的对数减去 \(a<b\) 的对数等于 \(k\) . ...

随机推荐

  1. 20162330 实验四 《Android程序设计》 实验报告

    2016-2017-2 实验报告目录: 1 2 3 4 5 20162330 实验四 <Android程序设计> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1623 ...

  2. python array 使用创建10万浮点数

    from array import array from random floats = array('d',random((for i in range(10**7)) fp = open('flo ...

  3. 第四十三条:返回零长度的数组或者集合,而不是null

    如果一个方法的返回值类型是集合或者数组 ,如果在方法内部需要返回的集合或者数组是零长度的,也就是没有实际对象在里面, 我们也应该放回一个零长度的数组或者集合,而不是返回null.如果返回了null,客 ...

  4. TFTP通信原理

    TFTP的通信流程 TFTP共定义了五种类型的包格式,格式的区分由包数据前两个字节的Opcode字段区分,分别是: · l 读文件请求包:Read request,简写为RRQ,对应Opcode字段值 ...

  5. NoSQL简介

    相信大家也多多少少了解过一些数据库,最常用的当属MySQL了,当然也这是关系型数据库的代表了 常见的关系型数据库有:MySQL.SQLServer.Oracle 而数据库也有另一个流派-----NoS ...

  6. VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

    工作中由于前期规划不足,导致磁盘空间分配较大,而且是厚置备.后期不再需要时,无法把用不到的空间释放出来,造成空间浪费.经过摸索和实验验证,总结出来一套方法. 风险提示:这个方法在我的环境中验证通过了, ...

  7. 网络IO超时的几种实现

    一.select/poll/epoll int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,str ...

  8. iot会议纪要 20180105

    1.需求概述设备 <-->物接入 <--> 云端认证授权协议解析主题 端点endpoint(地址)->设备thing(用户)->身份principal(密码)-&g ...

  9. kubernetes入门(04)kubernetes的核心概念(1)

    一.ReplicationController/ReplicaSet 在Kubernetes集群中,ReplicationController能够确保在任意时刻,指定数量的Pod副本正在运行.如果Po ...

  10. SpringCloud的应用发布(二)vmvare+linux,Centos7.0下发布应用

    一.运行环境 1.jdk下载安装 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 检查是否有老版本jdk 如 ...