BZOJ 3622: 已经没有什么好害怕的了(二项式反演)
##解题思路
首先将$a$,$b$排序,然后可以算出$t(i)$,表示$a(i)$比多少个$b(i)$大,根据容斥套路,设$f(k)$表示恰好有$k$个$a(i)$比$b(i)$大,$g(k)$表示至少有$k$个,那么$g(k)=\sum\limits_^n\dbinomf(i)$。发现这是一个二项式反演的形式,现在的问题变为如何求$g(k)$,发现可以强制选$k$组,其余的任意搭配,强制选$k$组就可以$dp$了。设$dp(i)(j)$表示前$i$个数,选了$j$个的方案数,因为$a$数组已经排好序,所以$dp(i)(j)=dp(i-1)(j)+dp(i-1)(j-1)max(0,t(i)-j+1)$,然后$g(k)=dp(n)(k)(n-k)!$
##代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int N=2005;
const int MOD=1e9+9;
typedef long long LL;
inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) f=ch=='-'?0:1,ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return f?x:-x;
}
inline int max(int x,int y){return x>y?x:y;}
int n,k,a[N],b[N],t[N],f[N][N],fac[N],inv[N],ans;
inline int fast_pow(int x,int y){
int ret=1;
for(;y;y>>=1){
if(y&1) ret=(LL)ret*x%MOD;
x=(LL)x*x%MOD;
}
return ret;
}
inline int C(int x,int y){
return (LL)fac[x]*inv[y]%MOD*inv[x-y]%MOD;
}
int main(){
n=rd(),k=rd();if((n+k)&1) return puts("0"),0;
k=(n+k)>>1;int now=1;fac[0]=1;
for(int i=1;i<=n;i++) a[i]=rd();
for(int i=1;i<=n;i++) b[i]=rd();
sort(a+1,a+1+n);sort(b+1,b+1+n);
for(int i=1;i<=n;i++){
t[i]=t[i-1];
while(a[i]>b[now] && now<=n) t[i]++,now++;
}
f[0][0]=1;
for(int i=1;i<=n;i++){
f[i][0]=1;
for(int j=1;j<=i;j++)
f[i][j]=(f[i-1][j]+(LL)f[i-1][j-1]*(max(0,t[i]-j+1))%MOD)%MOD;
}
for(int i=1;i<=n;i++) fac[i]=(LL)fac[i-1]*i%MOD;
inv[n]=fast_pow(fac[n],MOD-2);
for(int i=n-1;~i;i--) inv[i]=(LL)inv[i+1]*(i+1)%MOD;
for(int i=k;i<=n;i++){
if((i-k)&1) ans=(ans+(MOD-(LL)C(i,k)*f[n][i]%MOD*fac[n-i]%MOD))%MOD;
else ans=(ans+(LL)C(i,k)*f[n][i]%MOD*fac[n-i]%MOD)%MOD;
}
printf("%d\n",ans);
return 0;
}
BZOJ 3622: 已经没有什么好害怕的了(二项式反演)的更多相关文章
- bzoj 3622 已经没有什么好害怕的了——二项式反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3622 令 f[i] 表示钦定 i 对 a[ ]>b[ ] 的关系的方案数:g[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 ...
随机推荐
- Leetcode_897. Increasing Order Search Tree
题目:https://leetcode.com/problems/increasing-order-search-tree/ 题意: 将一棵二叉搜索树,重排为一棵递增的二叉排序树. 解法1: rson ...
- 【HDOJ6582】Path(最短路图,最小割)
题意: n,m<=1e4,c<=1e9 思路: #include<bits/stdc++.h> using namespace std; typedef long long l ...
- vue-cli2.X环境搭建
1.先安装nodejs环境https://npm.taobao.org/mirrors/node (选择版本) 下一步 下一步 默认安装就行 2.检查node和npm的是否成功安装node -v np ...
- HTTP返回码中200,302,304,404,500得意思
状态码的职责是当客户端向服务器端发送请求时,描述返回请求结果.借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了什么错误. 2开头的,响应成功,客户端请求服务器正常响应处理了. 3开头的,响 ...
- php面试专题---6、正则表达式考点
php面试专题---6.正则表达式考点 一.总结 一句话总结: 正则匹配步骤:1.先写出一个要匹配的字符串:2.自左向右的顺序使用正则表达式的原子和元字符进行拼接:3.最终加入模式修正符: 1.写出一 ...
- 110、TensorFlow张量值的计算
import tensorflow as tf #placeholders在没有提供具体值的时候不能使用eval方法来计算它的值 # 另外的建模方法可能会使得模型变得复杂 # TensorFlow 不 ...
- HTML最全标签
一.HTML标记 标签:!DOCTYPE 说明:指定了 HTML 文档遵循的文档类型定义(DTD). 标签:a 说明:标明超链接的起始或目的位置. 标签:acronym 说明:标明缩写词. ...
- Hibernate 异常org.hibernate.LazyInitializationException: could not ini...
错误页面提示 could not initialize proxy - no Session 控制台 org.hibernate.LazyInitializationException: could ...
- 【Python-Django讲义】针对django的ppt讲义
MCV思想: M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据你可以分别用柱状图.饼图来表示.C存在的目 ...
- .NET/VB.NET: solving the error “The system cannot find the file specified.” “\Temp\.NETFramework,Version=v4.0.AssemblyAttributes.vb”
Source Link Bumped into this error a while ago in Visual Studio 2010: Kind Error Number 80 Descripti ...