洛谷 P4859 已经没有什么好害怕的了 解题报告
已经没有什么好害怕的了
题目描述
已经使\(\tt{Modoka}\)有签订契约,和自己一起战斗的想法后,\(\tt{Mami}\)忽然感到自己不再是孤单一人了呢。
于是,之前的谨慎的战斗作风也消失了,在对\(\tt{Charlotte}\)的傀儡使用终曲——\(\tt{Tiro Finale}\)后,\(\tt{Mami}\)面临着即将被\(\tt{Charlotte}\)的本体吃掉的局面。
这时,已经多次面对过\(\tt{Charlotte}\)的\(\tt{Honiura}\)告诉了学\(OI\)的你这样一个性质:\(\tt{Charlotte}\)的结界中有两种具有能量的元素,一种是“糖果”,另一种是“药片”,各有\(n\)个。在\(\tt{Charlotte}\)发动进攻前,“糖果”和“药片”会两两配对,若恰好糖果比药片能量大的组数比“药片”比“糖果”能量大的组数多\(k\)组,则在这种局面下,\(\tt{Charlotte}\)的攻击会丟失,从而\(\tt{Mami}\)仍有消灭\(\tt{Charlotte}\)的可能。
你必须根据\(\tt{Homura}\)告诉你的“糖果”和“药片”的能量的信息迅速告诉\(\tt{Homura}\)这种情况的个数.
输入输出格式
输入格式:
第一行两个整数\(n\),\(k\),含义如题目所描述。
接下来一行\(n\)个整数,第\(i\)个数表示第\(i\)个糖果的能量。
接下来\(n\)个整数,第\(j\)个数表示第\(j\)个药片的能量。
保证上面两行不会有重复的数字
输出格式:
一个答案,表示消灭\(\tt{Charlotte}\)的情况个数,要 \(\bmod (10^9 + 9)\)
说明
对于\(100\%\)的数据:\(l\le n\le 2000,0\le k\le n\)
因为元素互不相同,所以我们可以得到应该有多少组糖果大于药片,即为\(d=\frac{k+n}{2}\)
称某个糖果\(i\)配对到比她少的药品时为性质\(i\),则问题为 有多少种配对方案满足恰好有满足\(d\)个性质。
令\(f_i\)为恰好满足\(i\)的性质的方案数,\(g_i\)为至少满足\(i\)个性质的方案数。
如果研究过容斥原理,而不是只浮于套路的表面,你会明白\(g_i\)实际上是自交的,画个\(\text{veen}\)图简单解释一下

每一个圆代表的方案集合为满足某个性质\(i\)的方案集合。
例如\(f_2\)为颜色不深不浅的黄色部分,而\(g_1\)为三个圆的面积之和(它的中间有交)
有
\]
解释一下,对于至少\(k\)个元素的集合,有\(i\)个元素的集合被重复计算了\(\binom{i}{k}\)次
\]
这里就是在容斥了。
事实上上面的过程就是在进行二项式反演,不过我没有研究过它的一些证明,所以只能将就的感性理解了。
为什么要引入定义这么容易误导的\(g_i\)(反正我最开始学的时候一直搞不懂“至少”)呢?
因为\(\tt{Ta}\)好算啊。
比如这个题,令\(dp_{i,j}\)代表前\(i\)个递增的糖果已经配对出了\(j\)对并且满足\(j\)个性质的方案数,有转移
\]
\(p_i\)代表糖果\(i\)大于多少个药品,可以\(two-pointer\)也可以二分求
那么就有
\]
Code:
#include <cstdio>
#include <algorithm>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,a,b) for(int i=a;i>=b;i--)
#define st(a,b) std::sort(a,b)
#define lb(a,b,c) std::lower_bound(a,b,c)-(a);
#define ll long long
const int N=2010;
const ll mod=1e9+9;
ll quickpow(ll d,ll k)
{
ll f=1;
while(k){if(k&1)f=f*d%mod;d=d*d%mod;k>>=1;}
return f;
}
ll dp[N][N],g[N],inv[N],fac[N],ans;
int m[N],c[N],p[N],n,k;
int main()
{
scanf("%d%d",&n,&k);
fac[0]=1;
rep(i,1,n) scanf("%d",c+i),fac[i]=fac[i-1]*i%mod;
rep(i,1,n) scanf("%d",m+i);
if(k+n&1) return puts("0"),0;
k=k+n>>1;
inv[n]=quickpow(fac[n],mod-2);
dep(i,n-1,0) inv[i]=inv[i+1]*(i+1)%mod;
st(c+1,c+1+n),st(m+1,m+1+n);
rep(i,1,n) p[i]=lb(m+1,m+1+n,c[i]);
dp[0][0]=1;
rep(i,1,n)
rep(j,0,p[i])
dp[i][j]=(dp[i-1][j]+(j?dp[i-1][j-1]*(p[i]+1-j):0))%mod;
rep(i,k,n)
g[i]=dp[n][i]*fac[n-i]%mod;
rep(i,k,n)
(ans+=(i-k&1?-1:1)*fac[i]%mod*inv[i-k]%mod*inv[k]%mod*g[i])%=mod;
printf("%lld\n",(ans+mod)%mod);
return 0;
}
2018.10.23
洛谷 P4859 已经没有什么好害怕的了 解题报告的更多相关文章
- 题解-洛谷P4859 已经没有什么好害怕的了
洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...
- 洛谷1601 A+B Problem(高精) 解题报告
洛谷1601 A+B Problem(高精) 本题地址:http://www.luogu.org/problem/show?pid=1601 题目背景 无 题目描述 高精度加法,x相当于a+b pro ...
- 洛谷P4859 已经没有什么好害怕的了 [DP,容斥]
传送门 思路 大佬都说这是套路题--嘤嘤嘤我又被吊打了\(Q\omega Q\) 显然,这题是要\(DP\)的. 首先思考一下性质: 为了方便,下面令\(k=\frac{n+k}{2}\),即有恰好\ ...
- 洛谷P4859 已经没有什么好害怕的了
因为不存在任意两个数相同,那么设糖果比药片大的组有 \(x\) 个,药片比糖果大的组有 \(y\) 个,那么我们有: \[x + y = n, x - y = k \] 即: \[x = \frac{ ...
- 洛谷 P2783 有机化学之神偶尔会做作弊 解题报告
P2783 有机化学之神偶尔会做作弊 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 有一天他一边搓炉石一边监考,而你作为一个信息竞赛的大神也来凑热闹. 然而你的化竞基友却向你求助了. &quo ...
- 洛谷 P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows 解题报告
P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows 题意: 给定一个长\(N\)的序列,求满足任意两个相邻元素之间的绝对值之差不超过\(K\)的这个序列的排列有多少个? 范围: ...
- 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB 解题报告
[国家集训队]Crash的数字表格 / JZPTAB 题意 求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\),\(n,m\le 10^7\) 鉴于 ...
- 「洛谷P2906」[USACO08OPEN]牛的街区Cow Neighborhoods 解题报告
P2906 [USACO08OPEN]牛的街区Cow Neighborhoods 题目描述 Those Who Know About Cows are aware of the way cows gr ...
- 洛谷4859 BZOJ3622 已经没什么好害怕的了(DP,二项式反演)
题目链接: 洛谷 BZOJ 题目大意:有两个长为 $n$ 的序列 $a,b$,问有多少种重排 $b$ 的方式,使得满足 $a_i>b_i$ 的 $i$ 的个数比满足 $a_i<b_i$ 的 ...
随机推荐
- 商城项目:商品列表ajax加载,ajax加入购物车--五张表的联合查询
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ProductLists.a ...
- Hive(2)-Hive的安装,使用Mysql替换derby,以及一丢丢基本的HQL
一. Hive下载 1. Hive官网地址 http://hive.apache.org/ 2. 文档查看地址 https://cwiki.apache.org/confluence/display/ ...
- java8lambda表达式初识
一.函数式接口 只有一个 抽象方法 的 接口 叫函数式接口 /** * @auther hhh * @date 2018/12/24 22:20 * @description 函数式接口:只有 一个 ...
- 42-EF Core Migration
1-常用命令 1-由于2.1版本有点不一样,不会自动创建ApplicationUser类,发现合并没效果.暂时略 增加一个字段 E:\coding\netcore\IdentitySample> ...
- DESCRIBEFIELD
実行時データ型識別.略語は RTTI です.プログラム実行時にデータ型を識別して処理を行う仕組みです.. DESCRIBE FIELD命令を使用 DESCRIBE FIELD命令を使用して.変数のデー ...
- 当app出现线上奔溃,该如何办?
1.如何追踪app崩溃率,如何解决线上闪退 当iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈跟踪信息和 ...
- [bzoj5158][Tjoi2014]Alice and Bob
好羞愧啊最近一直在刷水... 题意:给定序列$c$的$a_i$,构造出一个序列$c$使得$\sum b_i$最大. 其中$a_i$表示以$c_i$结尾的最长上升子序列长度,$b_i$表示以$c_i$为 ...
- iOS中的数据库应用
iOS中的数据库应用 SLQLite简介 什么是SQLite SQLite是一款轻型的嵌入式数据库 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 它的处理速度比Mysql.Post ...
- MySQL性能分析和优化-part 1
MySQL性能优化 平时我们在使用MySQL的时候,怎么评估系统的运行状态,怎么快速定位系统瓶颈,又如何快速解决问题呢? 本文总结了多年来MySQL优化的经验,系统介绍MySQL优化的方法. OS性能 ...
- 拉普拉斯矩阵(Laplacian Matrix) 及半正定性证明
摘自 https://blog.csdn.net/beiyangdashu/article/details/49300479 和 https://en.wikipedia.org/wiki/Lapla ...