正题

题目链接:https://www.luogu.com.cn/problem/P4859


题目大意

两个长度为\(n\)的序列\(a,b\)两两匹配,求\(a_i>b_i\)的组数比\(a_i<b_i\)的组数多\(k\)的方案数。

保证输入数字两两不同


解题思路

其实就是求恰好有\(\frac{n+k}{2}\)种\(a_i>b_i\)的匹配方案。

先设\(f_{i,j}\)表示到\(a\)的第\(i\)个,已经选择了\(j\)组的方案。转移起来比较麻烦,我们不知道\(b\)中选了哪些。

把\(a\)和\(b\)排序后,设\(l_i\)表示一个最大的数字使得\(a_i>b_{l_i}\),然后就可以\(dp\)了

\[f_{i,j}=f_{i-1,j}+f_{i-1,j-1}\times(l_i-j+1)
\]

之后发现我们很难固定其他配对的大小,可以考虑容斥,设\(g_i\)表示至少有\(i\)对满足\(a_i>b_i\)的方案,那么有\(g_i=f_i\times (n-i)!\)。

然后就可以直接容斥了,因为\(g_i\)中有\(\binom{i}{k}\)中方案选出\(k\)个配对满足,所以容斥系数就是\((-1)^{i-k}\binom{i}{k}\)

答案就是

\[\sum_{i=k}^n(-1)^{i-k}\binom{i}{k}g_i
\]

时间复杂度\(O(n^2)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2100,P=1e9+9;
ll n,k,C[N][N],a[N],b[N],f[N][N],g[N],l[N],ans;
signed main()
{
scanf("%lld%lld",&n,&k);
if((n+k)&1)return puts("0")&0;
k=(n+k)/2;C[0][0]=1;
for(ll i=1;i<=n;i++)
for(ll j=0;j<=i;j++)
C[i][j]=(C[i-1][j]+(j?C[i-1][j-1]:0))%P;
for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);
for(ll i=1;i<=n;i++)scanf("%lld",&b[i]);
sort(a+1,a+1+n);sort(b+1,b+1+n);
for(ll i=1;i<=n;i++)
for(ll j=1;j<=n;j++)
if(b[j]<a[i])l[i]=j;
else break;
f[0][0]=1;
for(ll i=1;i<=n;i++)
for(ll j=0;j<=n;j++)
f[i][j]=(f[i-1][j]+(j?f[i-1][j-1]*max(l[i]-j+1,0ll)%P:0))%P;
for(ll i=n,s=1;i>=0;i--,s=s*(n-i)%P)g[i]=f[n][i]*s%P;
for(ll i=k;i<=n;i++){
ll tmp=g[i]*C[i][k]%P;
(ans+=((i-k)&1)?P-tmp:tmp)%=P;
}
printf("%lld\n",ans);
return 0;
}

P4859-已经没有什么好害怕的了【容斥,dp】的更多相关文章

  1. 【BZOJ3622】已经没有什么好害怕的了 容斥+DP

    [BZOJ3622]已经没有什么好害怕的了 Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output ...

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

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

  3. BZOJ 3622 Luogu P4859 已经没有什么好害怕的了 (容斥原理、DP)

    题目链接 (Luogu) https://www.luogu.org/problem/P4859 (bzoj) https://www.lydsy.com/JudgeOnline/problem.ph ...

  4. P4859 已经没有什么好害怕的了(dp+二项式反演)

    P4859 已经没有什么好害怕的了 啥是二项式反演(转) 如果你看不太懂二项式反演(比如我) 那么只需要记住:对于某两个$g(i),f(i)$ ---------------------------- ...

  5. 题解-洛谷P4859 已经没有什么好害怕的了

    洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...

  6. 洛谷 P4859 已经没有什么好害怕的了 解题报告

    已经没有什么好害怕的了 题目描述 已经使\(\tt{Modoka}\)有签订契约,和自己一起战斗的想法后,\(\tt{Mami}\)忽然感到自己不再是孤单一人了呢. 于是,之前的谨慎的战斗作风也消失了 ...

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

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

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

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

  9. 【BZOJ3622】已经没有什么好害怕的了(动态规划,容斥)

    [BZOJ3622]已经没有什么好害怕的了(动态规划,容斥) 题面 BZOJ 题解 很明显的,这类问题是要从至少变成恰好的过程,直接容斥即可. 首先我们要求的是(糖果>药片)=(药片>糖果 ...

随机推荐

  1. git忽略文件夹提交以及gitignore修改后不生效的解决办法

    1.在 .gitgnore 文件加入需要忽略的问价夹正则表达式: 在配置完以后提交代码,你可能会发现git忽略配置不生效! 解决办法,将缓存的文件重新添加一下即可 2.打开命令行,将下面三个命令复制粘 ...

  2. 【spring】spring 核心注解

    注解具体分类如下: 1.模式注解 @Repository             数据仓储模式注解 @Component            通用组件模式注解 @Service            ...

  3. 玩转Spring生命周期之Lifecycle

    Lifecycle callbacks Initialization callbacks.Destruction callbacks要与容器的bean生命周期管理交互,即容器在启动后和容器在销毁前对每 ...

  4. 连接共享打印机失败错误代码0x80070035

    局域网内共享打印机非常方便,但是在连接中经常遇到问题,其中出现错误代码0x80070035的概率非常之高! 1.必须确保有关打印功能的相关服务都处于自动启动状态,重点检查TCP/IP NetBIOS ...

  5. vue@cli3 项目模板怎么使用public目录下的静态文件,找了好久都不对,郁闷!

    作为图片最好放在static目录下,但是vue@cli3没有static,网上都说放在public目录下,行,那就放吧,可问题是图片放了怎么使用 第一次尝试 肯定用绝对路径这就不说了,用相对路径,we ...

  6. easyexcel

    导出: package com.example.demo.excel.demo0; import com.alibaba.excel.annotation.ExcelProperty; import ...

  7. forEachRemaining

    ArrayList<Integer> arrayList=new ArrayList<>(); for (int i = 0; i <10; i++) { arrayLi ...

  8. promise的信任问题&控制反转

    //信任问题 //第三方的某个库 function method(cb){ setTimeout(function(){ cb && cb(); //这个库的bug:函数被多调用了一次 ...

  9. java一些工具类

    import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java. ...

  10. ubuntu中用update-alternatives进行软件多版本设置、切换,以python配置为例

    以Python2.7和Python3.5设置为例: 在系统中添加Python2.7.Python3.5的选项,默认为Python3.5 sudo update-alternatives --insta ...