题目: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 已经没有什么好害怕的了——二项式反演的更多相关文章

  1. BZOJ 3622: 已经没有什么好害怕的了(二项式反演)

    传送门 解题思路 首先将\(a\),\(b\)排序,然后可以算出\(t(i)\),表示\(a(i)\)比多少个\(b(i)\)大,根据容斥套路,设\(f(k)\)表示恰好有\(k\)个\(a(i)\) ...

  2. luoguP4859 已经没有什么好害怕的了(二项式反演)

    luoguP4859 已经没有什么好害怕的了(二项式反演) 祭奠天国的bzoj. luogu 题解时间 先特判 $ n - k $ 为奇数无解. 为了方便下记 $ m = ( n + k ) / 2 ...

  3. BZOJ 3622: 已经没有什么好害怕的了 [容斥原理 DP]

    3622: 已经没有什么好害怕的了 题意:和我签订契约,成为魔法少女吧 真·题意:零食魔女夏洛特的结界里有糖果a和药片b各n个,两两配对,a>b的配对比b>a的配对多k个学姐就可能获胜,求 ...

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

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

  5. BZOJ 3622 : 已经没有什么好害怕的了(dp + 广义容斥原理)

    今天没听懂 h10 的讲课 但已经没有什么好害怕的了 题意 给你两个序列 \(a,b\) 每个序列共 \(n\) 个数 , 数之间两两不同 问 \(a\) 与 \(b\) 之间有多少配对方案 使得 \ ...

  6. BZOJ3622 已经没有什么好害怕的了 二项式反演+DP

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3622 题解 首先显然如果 \(n - k\) 为奇数那么就是无解.否则的话,"糖果& ...

  7. [BZOJ 3622]已经没有什么好害怕的了

    世萌萌王都拿到了,已经没有什么好害怕的了——    (作死) 笑看哪里都有学姐,真是不知说什么好喵~ 话说此题是不是输 0 能骗不少分啊,不然若学姐赢了,那么有头的学姐还能叫学姐吗?  (作大死) 这 ...

  8. ●BZOJ 3622 已经没有什么好害怕的了

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3622 题解: 容斥,dp1).可以求出需要多少对"糖果>药片"(K ...

  9. 解题:BZOJ 3622 已经没有什么好害怕的了·

    题面 用来学习二项式反演的题目 大于等于/小于等于 反演出 恰好等于 设前者为f(n),后者为g(n),则有$f(n)=\sum\limits_{i=0}^nC_n^ig(n)<->g(n ...

随机推荐

  1. 决策树ID3算法实现

    决策树的ID3算法基于信息增益来选择最优特征,于是自己实现了一把,直接上代码. """ CreateTime : 2019/3/3 22:19 Author : X Fi ...

  2. springboot activiti关闭验证自动部署

    # spring-activiti # 自动部署验证设置:true-开启(默认).false-关闭 spring.activiti.check-process-definitions=false # ...

  3. ES curl bulk 导入数据

    比如我们现在有这样一个文件,data.json: { " } } { "field1" : "value1" } 它的第一行定义了_index,_ty ...

  4. web安全问题分析及处理

    前言 这是我观看了<前端漏洞分析及处理-蔡慧芨>公开课之后的一个总结及简单实践体会.在可能的情况下我会把他们都实际操作一遍,更加深刻地体会前端安全的重要性. web安全问题有哪些 XSS- ...

  5. Linux C ftruncate 函数清空文件注意事项(要使用 lseek 重置偏移量)

    转载:http://blog.csdn.net/a_ran/article/details/43562429 int truncate(const char *path, off_t length); ...

  6. spring boot 学习(三)API注解记录及测试

    spring boot API注解记录及测试 部分注解解析 @Controller : 修饰创建处理 http 处理对象,一般用于页面渲染时使用. @RestController : Json数据交互 ...

  7. elasticsearch配置详解

    一.说明 使用的是新版本5.1,直接从官网下载rpm包进行安装,https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5 ...

  8. kill prefix meta,milli,kilo input

    1● meta 超过,改变   2● milli 1/1000   3● kilo 1000      

  9. Python笔记初识

    Python笔记初识

  10. Myeclipse快键键

    ------------------------------------MyEclipse 快捷键1(CTRL)-------------------------------------Ctrl+1 ...