洛谷P4859 已经没有什么好害怕的了

给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) 互不相等。将糖果和药片一一对应,求 糖果能量大于药片 比 药片能量大于糖果 多 \(k\) 组的方案数。

数据范围:\(1\le n\le 2000\),\(0\le k\le n\)。


萌新初学二项式反演,这是第一道完全自己做出来的题,所以写篇题解庆祝并提升理解。


有 \(\frac{n+k}{2}\) 组糖果能量大于药片,\(\frac{n-k}{2}\) 组药片能量大于糖果

如果 \(n+k\) 是奇数,直接答案为 \(0\) 特判掉。

\(f(i)\) 表示 \(i\) 组糖果能量大于药片,\(n-i\) 组药片能量大于糖果的方案数。

\(g(i)\) 表示 \(i\) 组糖果能量大于药片,\(n-i\) 组随意的方案数。

二项式反演必然有 \(f(i)\) 和 \(g(i)\),往往前者表示 \(i\) 个符合条件 \(a\) 剩下符合另条件 \(b\),后者表示 \(i\) 个符合条件 \(a\) 剩下随意。


先考虑 \(g(i)\) 怎么独立地求,蒟蒻想到了 \(\tt dp\)。

将 \(a_i\) 和 \(b_i\) 排序,现在 \(a_i<a_{i+1}\),\(b_i<b_{i+1}\)。

比如 \(b_i<a_1<b_{i+1}\),\(b_j<a_2<b_{j+1}(i<j)\)。

所以 \(a_1\) 可以对应 \(b_1\sim b_i\),\(a_2\) 可以对应 \(b_1\sim b_j\)。

因为 \(a_1\) 对于的 \(b_x\) 满足 \(x<i<j\),所以必然占了一个 \(a_2\) 可以对应的位。

所以有 \(i(j-1)\) 种对应法。

设 \(F_{i,j}\) 表示看了 \(a_1\sim a_i\),对应了 \(j\) 组的方案数。

令 \(p(i)\) 表示 \(b_{p(i)}<a_i<b_{p(i)+1}\)。

同理,所以 \(F(0,0)=1\)。

\[F(i,j)=F(i-1,j)+F(i-1,j-1)\cdot (p(i)-(j-1))
\]
\[g(i)=F(n,i)\cdot(n-i)!
\]

二项式反演来了:

\[g(i)=\sum_{x=i}^n{x\choose i}f(x) \Longleftrightarrow f(i)=\sum_{x=i}^n(-1)^{x-i}{x\choose i}g(x)
\]

答案是 \(f(\frac{n+k}{2})\),带进去算就好了。


时间复杂度 \(\Theta(n^2)\),空间复杂度 \(\Theta(n^2)\)。


  • 代码

下标从 \(0\) 开始的...巨佬们琢磨琢磨吧。\(\tt /kel\)。

#include <bits/stdc++.h>
using namespace std; //Start
typedef long long ll;
typedef double db;
#define mp(a,b) make_pair(a,b)
#define x first
#define y second
#define be(a) a.begin()
#define en(a) a.end()
#define sz(a) int((a).size())
#define pb(a) push_back(a)
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f; //Data
const int mod=1e9+9; //Main
int main(){
cin.tie(0);
int n,k; cin>>n>>k;
vector<int> a(n),b(n);
for(int&ai:a) cin>>ai;
for(int&bi:b) cin>>bi;
if((n-k)&1) return cout<<0<<'\n',0;
sort(be(a),en(a));
sort(be(b),en(b));
vector<vector<int>> f(n+1,vector<int>(n+1,0));
f[0][0]=1;
for(int i=0,p=-1;i<n;i++){
while(p+1<n&&b[p+1]<a[i]) p++;
for(int j=0;j<n+1;j++) f[i+1][j]=f[i][j];
for(int j=0;j<n;j++) (f[i+1][j+1]+=(ll)f[i][j]*(p-j+1)%mod)%=mod;
}
for(int j=n,s=1;j>=0;j--) f[n][j]=(ll)f[n][j]*s%mod,s=(ll)s*(n-j+1)%mod;
vector<vector<int>> c(n+1,vector<int>(n+1,0));
for(int i=0;i<n+1;i++){
c[i][0]=c[i][i]=1;
for(int j=1;j<i;j++) c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
}
int ans=0,t=(n+k)>>1;
for(int i=t;i<n+1;i++){
int sum=(ll)f[n][i]*c[i][t]%mod;
if((i-t)&1) (ans+=-sum+mod)%=mod;
else (ans+=sum)%=mod;
}
cout<<ans<<'\n';
return 0;
}

祝大家学习愉快!

题解-洛谷P4859 已经没有什么好害怕的了的更多相关文章

  1. 洛谷P4859 已经没有什么好害怕的了 [DP,容斥]

    传送门 思路 大佬都说这是套路题--嘤嘤嘤我又被吊打了\(Q\omega Q\) 显然,这题是要\(DP\)的. 首先思考一下性质: 为了方便,下面令\(k=\frac{n+k}{2}\),即有恰好\ ...

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

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

  3. 洛谷P4859 已经没有什么好害怕的了

    因为不存在任意两个数相同,那么设糖果比药片大的组有 \(x\) 个,药片比糖果大的组有 \(y\) 个,那么我们有: \[x + y = n, x - y = k \] 即: \[x = \frac{ ...

  4. 题解 洛谷P5018【对称二叉树】(noip2018T4)

    \(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...

  5. 题解 洛谷 P3396 【哈希冲突】(根号分治)

    根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...

  6. 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)

    题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...

  7. 题解-洛谷P4229 某位歌姬的故事

    题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...

  8. 题解-洛谷P4724 【模板】三维凸包

    洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...

  9. 题解-洛谷P5217 贫穷

    洛谷P5217 贫穷 给定长度为 \(n\) 的初始文本 \(s\),有 \(m\) 个如下操作: \(\texttt{I x c}\),在第 \(x\) 个字母后面插入一个 \(c\). \(\te ...

随机推荐

  1. 线程队列分享ppt

  2. 创建Grafana监控视图

    前言 Grafana允许查询,可视化,警报和了解指标,无论它们存储在哪里. 可视化:具有多种选项的快速灵活的客户端图.面板插件提供了许多不同的方式来可视化指标和日志. 动态仪表盘:使用模板变量创建动态 ...

  3. Spring源码之循环依赖

    https://www.cnblogs.com/longy2012/articles/12834762.html https://www.bilibili.com/video/BV1iD4y1o7pM ...

  4. 分布式监控系统之Zabbix基础使用

    前文我们了解了分布式监控系统zabbix的相关组件的作用和zabbix的部署,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13997582.html:今天我们 ...

  5. USACO 2020 OPEN Favorite Colors【并查集-启发式合并-思考】

    题目链接 题意简述 仰慕喜欢同色奶牛的奶牛喜欢同色 (禁止套娃 ,求一种方案,奶牛喜欢的颜色种数最多,多种方案求字典序最小. 题目解析 这道题我最先想到的居然是二分+并查集,我在想啥 咳咳 首先,考虑 ...

  6. Linux(CentOS6.8)配置ActiveMQ

    1.下载ActiveMQ http://activemq.apache.org/ 注:若是想下载老版本的ActiveMQ可以通过以下链接下载 http://activemq.apache.org/do ...

  7. 没有wget Loading mirror speeds from cached hostfile

    问题描述 新装的系统,没有一些常用命令的rpm包.使用ifconfig,报错 Loading mirror speeds from cached hostfile解决 网上解决方案是换数据下载源,但是 ...

  8. CentOS初级扫盲

    发行版介绍 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX(可移植操作系统接口Portable Operating System Interface ,缩写为 POSIX ...

  9. 推荐系统实践 0x09 基于图的模型

    用户行为数据的二分图表示 用户的购买行为很容易可以用二分图(二部图)来表示.并且利用图的算法进行推荐.基于邻域的模型也可以成为基于图的模型,因为基于邻域的模型都是基于图的模型的简单情况.我们可以用二元 ...

  10. C#中的WinForm问题——如何设置窗体的大小为超过屏幕显示的最大尺寸?

    今天在学习C#时遇到了一个问题,在此记录下来,留作日后总结复习之用,也分享给有同样问题和困扰的园友. 我手上的电脑是笔记本电脑,屏幕的尺寸大小为1366*768,然而项目所使用的屏幕大小为1920*1 ...