bzoj 3622 已经没有什么好害怕的了——二项式反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3622
令 f[i] 表示钦定 i 对 a[ ]>b[ ] 的关系的方案数;g[i] 表示恰好 i 对 a[ ]>b[ ] 的关系的方案数。
那么 \(f[i]=\sum\limits_{j>=i}C_{j}^{i}*g[j] \) ,\(g[i]=\sum\limits_{j>=i}C_{j}^{i}f[j](-1)^{j-i} \)
考虑怎么求 f[ ] 。可以 DP 。
先把 a[ ] 和 b[ ] 都按从小到大的顺序排序,dp[i][j]表示前 i 个 a[ ] 匹配了 j 对 a[ ] > b[ ] 的关系的方案数。
排序的好处就是 a[ ] > b[ ] 的一段 b[ ] ,a[i] 的这一段能包含 a[i-1] 的这一段。所以转移就是 dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(p0-(j-1)),其中p0是比 a[i] 小的 b[ ] 的个数。
然后别忘了 f[ i ] = dp[n][i]*(n-i)! ,阶乘表示其他配对可以随意。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int Mn(int a,int b){return a<b?a:b;}
const int N=,mod=1e9+;
int upt(int x){if(x>=mod)x-=mod;return x;}
int n,k,a[N],b[N],dp[N],c[N][N];
void init()
{
for(int i=;i<=n;i++)c[i][]=;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
c[i][j]=upt(c[i-][j]+c[i-][j-]);
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=n;i++)scanf("%d",&b[i]);
k+=n;if(k&){puts("");return ;}//
k>>=;
sort(a+,a+n+); sort(b+,b+n+);
int p0=;dp[]=;
for(int i=;i<=n;i++)
{
while(p0<n&&b[p0+]<a[i])p0++;
for(int j=Mn(i,p0);j;j--)
dp[j]=(dp[j]+(ll)dp[j-]*(p0-j+))%mod;
}
for(int i=n,lj=,j=;i;i--,j++,lj=(ll)lj*j%mod)
dp[i]=(ll)dp[i]*lj%mod;
int ans=; init();
for(int i=k,j=;i<=n;i++,j=-j)
ans=(ans+(ll)dp[i]*j*c[i][k])%mod;
if(ans<)ans+=mod; printf("%d\n",ans);
return ;
}
bzoj 3622 已经没有什么好害怕的了——二项式反演的更多相关文章
- BZOJ 3622: 已经没有什么好害怕的了(二项式反演)
传送门 解题思路 首先将\(a\),\(b\)排序,然后可以算出\(t(i)\),表示\(a(i)\)比多少个\(b(i)\)大,根据容斥套路,设\(f(k)\)表示恰好有\(k\)个\(a(i)\) ...
- luoguP4859 已经没有什么好害怕的了(二项式反演)
luoguP4859 已经没有什么好害怕的了(二项式反演) 祭奠天国的bzoj. luogu 题解时间 先特判 $ n - k $ 为奇数无解. 为了方便下记 $ m = ( n + k ) / 2 ...
- BZOJ 3622: 已经没有什么好害怕的了 [容斥原理 DP]
3622: 已经没有什么好害怕的了 题意:和我签订契约,成为魔法少女吧 真·题意:零食魔女夏洛特的结界里有糖果a和药片b各n个,两两配对,a>b的配对比b>a的配对多k个学姐就可能获胜,求 ...
- bzoj 3622 已经没有什么好害怕的了 类似容斥,dp
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1213 Solved: 576[Submit][Status][ ...
- BZOJ 3622 : 已经没有什么好害怕的了(dp + 广义容斥原理)
今天没听懂 h10 的讲课 但已经没有什么好害怕的了 题意 给你两个序列 \(a,b\) 每个序列共 \(n\) 个数 , 数之间两两不同 问 \(a\) 与 \(b\) 之间有多少配对方案 使得 \ ...
- BZOJ3622 已经没有什么好害怕的了 二项式反演+DP
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3622 题解 首先显然如果 \(n - k\) 为奇数那么就是无解.否则的话,"糖果& ...
- [BZOJ 3622]已经没有什么好害怕的了
世萌萌王都拿到了,已经没有什么好害怕的了—— (作死) 笑看哪里都有学姐,真是不知说什么好喵~ 话说此题是不是输 0 能骗不少分啊,不然若学姐赢了,那么有头的学姐还能叫学姐吗? (作大死) 这 ...
- ●BZOJ 3622 已经没有什么好害怕的了
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3622 题解: 容斥,dp1).可以求出需要多少对"糖果>药片"(K ...
- 解题:BZOJ 3622 已经没有什么好害怕的了·
题面 用来学习二项式反演的题目 大于等于/小于等于 反演出 恰好等于 设前者为f(n),后者为g(n),则有$f(n)=\sum\limits_{i=0}^nC_n^ig(n)<->g(n ...
随机推荐
- C# 中的时间(DataTime)
在做报表或查询的时候,常常会预设一些可选的日期范围,如本周.本月.本年等,利用 C# 内置的DateTime基本上都可以实现这些功能. 当前时间: DateTime dt = DateTime.Now ...
- @Component、@Service、@Constroller
@Component.@Service.@Constroller,@Repository,它们分别用于软件系统的不同层次: @Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可 ...
- ThreadPoolExecutor类
首先分析内部类:ThreadPoolExecutor$Worker //Worker对线程和任务做了一个封装,同时它又实现了Runnable接口, //所以Worker类的线程跑的是自身的run方法 ...
- bzoj1215
题解: 暴力枚举每一种方案,然后hash判重 代码: #include<bits/stdc++.h> #define eps 1e-7 using namespace std; ],r[] ...
- CodeIgniter $this->db->where()的自定义语句写法问题
.自定义字符串:你可以手动的编写子句:$where = "name='Joe' AND status='boss' OR status='active'"; $this->d ...
- 怎么从sqlserver的存储过程获得返回的数据
1.返回一个数值 declare @count int exec @count = testReturn \'111\',\'222\' select @count @count就是返回的数值是int ...
- Python3 文件操作(十六)
一 文件操作 1.介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众 ...
- 解决:编辑一条彩信,附件选择添加音频,返回到编辑界面选择play,不能播放,没有声音
[操作步骤]:编辑一条彩信,附件选择添加音频(外部音频),返回到编辑界面选择play,菜单键选择view slideshow [测试结果]:不能播放,没有声音 [预期结果]:可以播放 根据以往的经验( ...
- 26个你不知道的Python技巧
Python是目前世界上最流行的编程语言之一.因为: 1.它容易学习 2.它用途超广 3.它有非常多的开源支持(大量的模块和库) 不好意思,优达菌又啰嗦了. 本文作者 Peter Gleeson 是一 ...
- 转:devicePixelRatio和webkitBackingStorePixelRatio
转:关于canvas在retina屏下绘制文字或图像模糊的解决方案 一.问题描述 最近在鼓捣canvas的时候,发现绘制在canvas上的文字(或图片)在retina屏幕上会出现显示模糊的问题,感觉很 ...