BZOJ 3622: 已经没有什么好害怕的了 [容斥原理 DP]
3622: 已经没有什么好害怕的了
题意:和我签订契约,成为魔法少女吧
真·题意:零食魔女夏洛特的结界里有糖果a和药片b各n个,两两配对,a>b的配对比b>a的配对多k个学姐就可能获胜,求方案数
PS:洛谷月赛拿到了一个Modoka的挂件O(∩_∩)O哈哈~
总的方案数就是\(n!\),相当于一个做全排列
恰好多k个,那么就是a>b的有\(k=k+\frac{n-k}{2}\)个
恰好\(\rightarrow\)容斥
\]
\(\ge i\)个就是先选出i对a>b的,剩下的任意排列
用个dp吧,先排序,求出\(g[i]\)表示\(a_i\)比\(g[i]\)个b大
\(f[i][j]\)表示前i个a选出j对a>b的方案数
\]
然后就一直WA...
原因是,你忘了spring吗,原因相同,我们算方案的时候重复了,每个k+i个配对的方案被考虑了 $\binom{k+i}{k}$ 次呀,应该只被考虑一次才对
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=2005, P=1e9+9;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int n, k, a[N], b[N];
ll f[N][N], fac[N], inv[N], facInv[N]; int g[N];
inline ll C(int n, int m) {return fac[n]*facInv[m]%P*facInv[n-m]%P;}
void dp() {
int now=0;
for(int i=1; i<=n; i++) {
while(now<n && a[i]>b[now+1]) now++;
g[i] = now;
}
for(int i=0; i<=n; i++) f[i][0]=1;
for(int i=1; i<=n; i++)
for(int j=1; j<=g[i]; j++) f[i][j] = (f[i-1][j] + f[i-1][j-1]*(g[i]-j+1)%P )%P;// printf("f %d %d %lld\n",i,j,f[i][j]);
}
int main() {
freopen("in","r",stdin);
n=read(); k=read(); if((n+k)&1) {puts("0"); return 0;}
k += (n-k)/2;
for(int i=1; i<=n; i++) a[i]=read();
for(int i=1; i<=n; i++) b[i]=read();
sort(a+1, a+1+n); sort(b+1, b+1+n);
inv[1]=1; fac[0]=facInv[0]=1;
for(int i=1; i<=n; i++) {
if(i!=1) inv[i] = (P-P/i)*inv[P%i]%P;
fac[i] = fac[i-1]*i%P;
facInv[i] = facInv[i-1]*inv[i]%P;
}
dp();
ll ans=0;
for(int i=k; i<=n; i++) ( ans += ( ((i-k)&1) ? -1 : 1 ) * fac[n-i] * f[n][i]%P * C(i, k)%P )%=P;
printf("%lld\n",(ans+P)%P);
}
BZOJ 3622: 已经没有什么好害怕的了 [容斥原理 DP]的更多相关文章
- 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\) 之间有多少配对方案 使得 \ ...
- [BZOJ 3622]已经没有什么好害怕的了
世萌萌王都拿到了,已经没有什么好害怕的了—— (作死) 笑看哪里都有学姐,真是不知说什么好喵~ 话说此题是不是输 0 能骗不少分啊,不然若学姐赢了,那么有头的学姐还能叫学姐吗? (作大死) 这 ...
- ●BZOJ 3622 已经没有什么好害怕的了
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3622 题解: 容斥,dp1).可以求出需要多少对"糖果>药片"(K ...
- bzoj 3622 已经没有什么好害怕的了——二项式反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3622 令 f[i] 表示钦定 i 对 a[ ]>b[ ] 的关系的方案数:g[i] 表 ...
- 解题:BZOJ 3622 已经没有什么好害怕的了·
题面 用来学习二项式反演的题目 大于等于/小于等于 反演出 恰好等于 设前者为f(n),后者为g(n),则有$f(n)=\sum\limits_{i=0}^nC_n^ig(n)<->g(n ...
- BZOJ 3622: 已经没有什么好害怕的了(二项式反演)
传送门 解题思路 首先将\(a\),\(b\)排序,然后可以算出\(t(i)\),表示\(a(i)\)比多少个\(b(i)\)大,根据容斥套路,设\(f(k)\)表示恰好有\(k\)个\(a(i)\) ...
- 【BZOJ3622】已经没什么好害怕的了 容斥原理+dp
Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output 4 HINT 输入的2*n个数字保证全不相 ...
- 【BZOJ 3622】3622: 已经没有什么好害怕的了(DP+容斥原理)
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 683 Solved: 328 Description Input ...
随机推荐
- HDU 1242 Rescue(优先队列)
题目来源: http://acm.hdu.edu.cn/showproblem.php?pid=1242 题目描述: Problem Description Angel was caught by ...
- 零基础教你写python爬虫
大家都知道python经常被用来做爬虫,用来在互联网上抓取我们需要的信息. 使用Python做爬虫,需要用到一些包: requests urllib BeautifulSoup 等等,关于python ...
- github中删除项目
- 织梦CMS安装分享插件
获取百度分享按钮织梦系统插件 点击下载:dedecms 5.* 插件 更新日期:2011.09.05 1.下载百度分享插件的织梦cms版本. 2.使用管理员账号登录您的站点后台管理中心,单击" ...
- 怎么从一台电脑的浏览器输入地址访问另一台电脑服务器(WAMP服务器已搭建,PHPSTORM装好了)
服务器电脑WAMP环境搭建好了,浏览器输入LOCALHOST就能访问本地 WAMP/WWW 目录下PHP文件,怎么样才能从另一台电脑通过浏览器访问呢?求详细步骤... glwbdtb | 浏览 180 ...
- 如何从Android工程导出apk安装包
http://jingyan.baidu.com/article/1876c852b3208b890b137606.html
- Tomcat下的Server.xml配置文件详解
自15年毕业到现在已经入行两年多了,一直以来没有深入的了解过tomcat的详细配置,只懂修改一下端口号.在网上找了些相关资料来支撑这篇文章,深入了解server.xml文件各配置的作用 <?xm ...
- python基础8之自定义模块、if __name__==__main__:解释
一.自定义模块与使用 python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- oracle01
01-基本的查询语句 A:一些命令 sqlplus sys/sys@192.168.22.220:1521/orcl as sysdba; conn scott/123456@192.168.22.2 ...
- linux批量添加10个用户并将其随机密码和用户名写入文件
需求: 批量新建10个测试用户,并且让其密码随机,把用户名和密码写入一个文件,并有创建时间和创建者 #!/usr/bin/python # -*- coding: utf-8 -*- import o ...