BZOJ 3622 已经没有什么好怕的了
扯淡
看到题目想到二项式反演
然后忘了给求阶乘的时候取模,调了一晚上
真令人窒息
思路
二项式反演
首先二项式反演还有另一种形式(不会证)
设\(G_i\)为有至少i个的方案数量,\(F_i\)为恰好有i个的方案数量
则有以下形式:
\]
所以套入本题
设\(F_i\)为恰好i对糖果比药片能量多的方案数,\(G_i\)为至少i对糖果比药片能量多的方案数
则可以对\(G_i\)dp求解
\(dp_{i,j}\)表示前i个,j对糖果比药片能量多的方案数,\(L_i\)是药片和糖果能量均从小到大排序后,最后一个能量小于第i个糖果的药片的标号,则\(G_i=dp_{n,i}\times(n-i)!\),原因显然,j对之后剩下的随便排列即可,所以乘上阶乘
dp方程是
\]
然后二项式反演即可
代码
#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
int a[3000],b[3000],dp[3000][3000],jc[3000],g[3000],inv[3000],n,k,t;
const int MOD = 1000000009;
int pow(int a,int b){
int ans=1;
while(b){
if(b&1)
ans=(1LL*a*ans)%MOD;
a=(1LL*a*a)%MOD;
b>>=1;
}
return ans%MOD;
}
int C(int n,int m){
return 1LL*jc[n]*inv[m]%MOD*inv[n-m]%MOD;
}
signed main(){
scanf("%lld %lld",&n,&k);
if((n+k)%2){
printf("0\n");
return 0;
}
t=(n+k)/2;
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
scanf("%lld",&b[i]);
sort(a+1,a+n+1);
sort(b+1,b+n+1);
int lastpos=0;
dp[0][0]=1;
for(int i=1;i<=n;i++){
dp[i][0]=dp[i-1][0];
for(int j=1;j<=i;j++){
for(;b[lastpos]<a[i]&&lastpos<=n;lastpos++);
lastpos--;
dp[i][j]=(1LL*dp[i-1][j]+1LL*dp[i-1][j-1]*max(lastpos-j+1,0LL)%MOD)%MOD;
}
}
jc[0]=1;
inv[0]=1;
for(int i=1;i<=n;i++){
jc[i]=1LL*jc[i-1]*i%MOD;
inv[i]=pow(jc[i],MOD-2);
}
for(int i=0;i<=n;i++)
g[i]=1LL*dp[n][i]*jc[n-i]%MOD;
int ans=0;
for(int i=t;i<=n;i++)
ans=(ans+1LL*(((i-t)%2)?-1:1)*C(i,t)*g[i]%MOD)%MOD;
printf("%lld\n",(ans%MOD+MOD)%MOD);
return 0;
}
BZOJ 3622 已经没有什么好怕的了的更多相关文章
- bzoj 3622 DP + 容斥
LINK 题意:给出n,k,有a,b两种值,a和b间互相配对,求$a>b$的配对组数-b>a的配对组数恰好等于k的情况有多少种. 思路:粗看会想这是道容斥组合题,但关键在于如何得到每个a[ ...
- BZOJ 3622 Luogu P4859 已经没有什么好害怕的了 (容斥原理、DP)
题目链接 (Luogu) https://www.luogu.org/problem/P4859 (bzoj) https://www.lydsy.com/JudgeOnline/problem.ph ...
- 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 已经没有什么好害怕的了
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3622 题解: 容斥,dp1).可以求出需要多少对"糖果>药片"(K ...
- BZOJ 3622 : 已经没有什么好害怕的了(dp + 广义容斥原理)
今天没听懂 h10 的讲课 但已经没有什么好害怕的了 题意 给你两个序列 \(a,b\) 每个序列共 \(n\) 个数 , 数之间两两不同 问 \(a\) 与 \(b\) 之间有多少配对方案 使得 \ ...
- bzoj 3622 已经没有什么好害怕的了——二项式反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3622 令 f[i] 表示钦定 i 对 a[ ]>b[ ] 的关系的方案数:g[i] 表 ...
- 【BZOJ 3622】3622: 已经没有什么好害怕的了(DP+容斥原理)
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 683 Solved: 328 Description Input ...
- [BZOJ 3622]已经没有什么好害怕的了
世萌萌王都拿到了,已经没有什么好害怕的了—— (作死) 笑看哪里都有学姐,真是不知说什么好喵~ 话说此题是不是输 0 能骗不少分啊,不然若学姐赢了,那么有头的学姐还能叫学姐吗? (作大死) 这 ...
随机推荐
- html5-section元素
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- JavaBean和List<JavaBean>
2018-11-04 23:04:03开始写 返回泛型为User是列表 public List<User> getUserInfo() { conn = getConn();//获取数据库 ...
- tetrahedron (公式)
我是直接搬运了某大佬的代码,毕竟我不清楚如何计算这个东西. 其中四点共面的求法就是体积为0,然后圆心和半径就公式了. #include<cstdio> #include<iostre ...
- 20155228 2017-5-10 课堂测试:Arrays和String单元测试
20155228 2017-5-10 课堂测试:Arrays和String单元测试 题目和要求 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 ...
- 【Hadoop学习之二】Hadoop伪分布式安装
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 伪分布式就 ...
- redis的优缺点和使用场景
1. 使用redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,li ...
- Java技术整理1---反射机制及动态代理详解
1.反射是指在程序运行过程中动态获取类的相关信息,包括类是通过哪个加载器进行加载,类的方法和成员变量.构造方法等. 如下示例可以通过三种方法根据类的实例来获取该类的相关信息 public static ...
- ClassTwo__HomeWork
1,素数输出 设计思路声明两个函数分别用来实现输出任意两个数之间所有的素数和任意两个数之间最大最小的十个素数 方法一:一个数的因子不会大于它本身的开方; 方法二:创建一个数组来储存素数并输出最大最小的 ...
- 量化交易-外汇交易-MetaTrader5
量化交易-外汇交易-MetaTrader5 外汇有充足的流动性, 7*24, 交易成本低,多空双向,外加杠杆,无人能控盘,有模拟盘,相当适合做量化交易练习积累经验. 第一,全球最大最公平的市场.外汇市 ...
- Spring Boot REST API 自动化测试
Spring Boot需要写大量的Junit代码来测试REST API, 这点让不了解代码的人很头疼.如果使用REST client工具测试REST API,很多REST Client工具是不支持自动 ...