题目描述

为了打开返回现世的大门,Yopilla 需要制作开启大门的钥匙。Yopilla 所在的迷失大陆有 \(n\) 种原料,只需要集齐任意 \(k\) 种,就可以开始制作。

Yopilla 来到了迷失大陆的核心地域。每个单位时间,这片地域就会随机生成一种原料。每种原料被生成的概率是不同的,第 ii种原料被生成的概率是$ \frac{p_i}{m} $。如果 Yopilla 没有这种原料,那么就可以进行收集。

Yopilla 急于知道,他收集到任意 kk 种原料的期望时间,答案对 \(998244353\) 取模。

输入输出格式

输入格式:

第一行三个数 \(n, k, m\)。

第二行 nn 个数 \(p_1, p_2, ..., p_np1,p2,...,pn\) 。

输出格式:

输出一行。

输入输出样例

输入样例#1:

复制

3 3 3
1 1 1

输出样例#1:

复制

499122182

说明

对于 \(10 \%\) 的数据,\(p_1 = p_2 = ... = p_m\) 。

对于另外 \(10 \%\) 的数据,\(k = n\)。

对于 \(70 \%\) 的数据,\(n \le 100\)。

对于 \(100 \%\)的数据,\(1 \le n \le 1000\),\(1 \le k \le n, \lvert n - k \rvert \le 10,0 \le p_i \le m, \sum p = m, 1 \le m \le 100000\)

min-max反演的推广:kth min-max反演

下面的证明转载自这位dalao的博客:https://blog.csdn.net/ez_2016gdgzoi471/article/details/81416333。

我们考虑构造一个容斥系数\(f(x)\),使得

\[kthmax(S)=\sum_{T⊆S}f(|T|)min(T)
\]

$考虑第x+1大的元素会被统计到的贡献。 \(
\)这个贡献为\sum_{i=0}{x}C_{x}{i}f(i+1) \(
上面这个式子就是说前\)x\(大的元素选或不选都无所谓,然后必选第\)x+1$大的元素的方案数。

\[[x==k-1]=\displaystyle\sum_{i=0}^{x}C_{x}^{i}f(i+1)
\]

二项式反演一下

\[f(x+1)=\displaystyle\sum_{i=0}^{x}(-1)^{x-i}C_{x}^{i}[i==k-1]
\]

得到

\[f(x+1)=(-1)^{x-(k-1)}C_{x}^{i-1}
\]

因此

\[f(x)=(-1)^{x-k}C_{x-1}^{k-1}
\]

综上,

\[kthmax(s)=\displaystyle\sum_{T \subseteq S}f(|T|)min(T)\\
=\sum_{T\subseteq S}(-1)^{|T|-k}C_{|T|-1}^{k-1}min(T)
\]


本题就是求第\((n-k+1)\)大的物品的出现的期望值。

我们直接套公式:

\[kthmax(s)\displaystyle=\sum_{T\subseteq S}(-1)^{|T|-k}C_{|T|-1}^{k-1}min(T)
\]


显然:\(min(T)=\frac{m}{\displaystyle\sum_{i \in S}p_i}\)。

然而天真的我以为可以直接将这个值DP出来,然后做自闭了。所以遇到这种非线性的求和还是不要乱来...

然后直接贴dalao的题解(逃):https://www.cnblogs.com/Trrui/p/9994668.html

Luogu P4707 重返现世的更多相关文章

  1. Luogu P4707 重返现世 (拓展Min-Max容斥、DP)

    题目链接 https://www.luogu.org/problem/P4707 题解 最近被神仙题八连爆了-- 首先Min-Max容斥肯定都能想到,问题是这题要用一个扩展版的--Kth Min-Ma ...

  2. 洛谷 P4707 重返现世

    洛谷 P4707 重返现世 k-minimax容斥 有这一个式子:\(E(\max_k(S))=\sum_{T\subseteq S}(-1)^{|T|-k}C_{|T|-1}^{k-1}\min(T ...

  3. P4707 重返现世 扩展 MinMax 容斥+DP

    题目传送门 https://www.luogu.org/problem/P4707 题解 很容易想到这是一个 MinMax 容斥的题目. 设每一个物品被收集的时间为 \(t_i\),那么集齐 \(k\ ...

  4. [洛谷P4707] 重返现世

    Description 为了打开返回现世的大门,\(Yopilla\) 需要制作开启大门的钥匙.\(Yopilla\) 所在的迷失大陆有 \(n\) 种原料,只需要集齐任意 \(k\) 种,就可以开始 ...

  5. 洛谷P4707 重返现世 [DP,min-max容斥]

    传送门 前置知识 做这题前,您需要认识这个式子: \[ kthmax(S)=\sum_{\varnothing\neq T\subseteq S}{|T|-1\choose k-1} (-1)^{|T ...

  6. 【题解】洛谷P4707重返现世

    在跨年的晚上玩手机被妈妈骂了赶来写题……呜呜呜……但是A题了还是很开心啦,起码没有把去年的题目留到明年去做ヾ(◍°∇°◍)ノ゙也祝大家2019快乐! 这题显然的 kth min-max 容斥就不说了, ...

  7. 洛谷P4707 重返现世(扩展MinMax容斥+dp)

    传送门 我永远讨厌\(dp.jpg\) 前置姿势 扩展\(Min-Max\)容斥 题解 看纳尔博客去→_→ 咱现在还没搞懂为啥初值要设为\(-1\)-- //minamoto #include< ...

  8. 洛谷 P4707 - 重返现世(扩展 Min-Max 容斥+背包)

    题面传送门 首先看到这种求形如 \(E(\max(T))\) 的期望题,可以套路地想到 Min-Max 容斥 \(\max(S)=\sum\limits_{T\subseteq S}(-1)^{|T| ...

  9. 【Luogu4707】重返现世(min-max容斥)

    [Luogu4707]重返现世(min-max容斥) 题面 洛谷 求全集的\(k-max\)的期望 题解 \(min-max\)容斥的证明不难,只需要把所有元素排序之后考虑组合数的贡献,容斥系数先设出 ...

随机推荐

  1. #15 time&datetime&calendar模块

    前言 从这一节开始,记录一些常用的内置模块,模块的学习可能比较无聊,但基础就在这无聊的模块中,话不多说,本节记录和时间相关的模块! 一.time模块 Python中设计时间的模块有很多,但是最常用的就 ...

  2. RocketMQ的broker启动失败解决

    RocketMQ的broker用如下命令启动: nohup sh bin/mqbroker -n localhost:9876 & 使用jps查看,系统非常卡顿,broker的名字也未显示.使 ...

  3. KM算法及其应用

    在二分图匹配中有最大匹配问题,使用匈牙利算法或者网络流相关算法解决,如果给每条边增加一个权值,求权值和最大的匹配方案就叫做最大权匹配问题.其实之前所说的最大匹配就是权值为1的最大权匹配. 求最大权完备 ...

  4. Linux中rm命令详解

    linux下rm命令使用详解---linux删除文件或目录命令 用户可以用rm命令删除不需要的文件.该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除 ...

  5. MailBee.NET

    MailBee.NET Objects 是一款为创建.发送.接收以及处理电子邮件而设计的健壮.功能丰富的.NET控件.具备“必需”以及独特的功能,这些控件帮助开发人员简单快速地将复杂的电子邮件功能添加 ...

  6. vb.net 使用NPOI控制Excel檔

    '導入命名空間 Imports NPOI.HSSF.UserModelImports NPOI.HPSFImports NPOI.POIFS.FileSystem Private Sub A1()'方 ...

  7. 2018年你需要知道的13个JavaScript工具库

    译者按: 你可能已经用到Underscore或者Lodash.本文列举了13个常用的JavaScript工具库来提高开发效率. 原文: 11 Javascript Utility Libraries ...

  8. HDU1559

    最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  9. 前端面试(原生js篇) - 精确运算

    一.面试题 问:开发的时候有用到过 Math 吗? 答:很多啊.比如生成 GUID 的时候,就会用到 Math.random() 来生成随机数. 问:别的呢?比如向下取整.向上取整? 答:向下取整是  ...

  10. Js调试中不得不知的Console

    在js调试中,大部分的前端人员都是采用console.log()方法来打印出调试的数据,但是很多人都不知道console这个对象有很多很实在的方法,本文就来介绍一下这些方法的使用. 一.console ...