传送门

题目大意

你有 \(n\) 个数 \(a_1,a_2...a_n\)

要进行 \(k\) 次操作

每次随机选择一个数 \(x\),使得答案加上 \(\prod_{i \neq x}a_i\) ,并将 \(a_x\) 减去 \(1\)

求最后答案的期望,对 \(1e9+7\) 取模

Sol

设 \(b_i\) 表示 \(i\) 选择了多少次

把对 \(a_x\) 的一次操作的贡献看成是

\[\prod a_i−\prod a′_i
\]

其中 \(a′_i\) 表示将 \(a_x\) 减去 \(1\) 后的数组。

连续操作后,剩下的项就只剩下

\[\prod a_i−\prod(a_i−b_i)
\]

考虑计算 \(\prod(a_i−b_i)\) 的期望

考虑生成函数

答案就是

\[\prod_{i=1}^{n}(\sum_{j=0}^{\infty}\frac{a_i-j}{j!}x^j)[x^k]
\]

\([x^k]\) 表示 \(x^k\) 的系数,最后乘上 \(k!\) 和 \(\frac{1}{n^k}\)

那一坨东西化简一下就是

\[e^{nx}\prod_{i=1}^{n}(a_i-x)
\]

\(e^{nx}\) 直接泰勒展开求就好了,后面的直接分治NTT暴力卷起来就好了

最后把两个多项式再卷一下

# include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int mod(1e9 + 7);
const int maxn(5005); inline void Inc(int &x, int y) {
if ((x += y) >= mod) x -= mod;
} inline int Pow(ll x, int y) {
register ll ret = 1;
for (; y; y >>= 1, x = x * x % mod)
if (y & 1) ret = ret * x % mod;
return ret;
} int f[maxn], n, k, ans; int main() {
register int i, j, a, fac, cur;
scanf("%d%d", &n, &k), f[0] = 1;
for (i = 1; i <= n; ++i) {
scanf("%d", &a);
for (j = i; j; --j) f[j] = 1LL * f[j] * a % mod, Inc(f[j], mod - f[j - 1]);
f[0] = 1LL * f[0] * a % mod;
}
a = Pow(n, 1LL * k * (mod - 2) % (mod - 1)), cur = Pow(n, k - min(n, k));
for (fac = 1, i = k - min(n, k) + 1; i <= k; ++i) fac = 1LL * fac * i % mod;
for (i = min(n, k); ~i; --i) {
Inc(ans, 1LL * f[i] * fac % mod * cur % mod);
cur = 1LL * cur * n % mod, fac = 1LL * fac * Pow(k - i + 1, mod - 2) % mod;
}
ans = 1LL * ans * a % mod, ans = (f[0] - ans + mod) % mod;
printf("%d\n", ans);
return 0;
}

CF891E Lust的更多相关文章

  1. CF891E Lust 生成函数

    传送门 设在某一次操作之后的\(a\)数组变为了\(a'\)数组,那么\(\prod\limits_{i \neq x} a_i = \prod a_i - \prod a_i'\).那么就不难发现我 ...

  2. 【CF891E】Lust 生成函数

    [CF891E]Lust 题意:给你一个长度为n的序列$a_i$,对这个序列进行k次操作,每次随机选择一个1到n的数x,令$res+=\prod\limits_{i!=x}a_i$(一开始res=0) ...

  3. Seven Deadly Sins: Gluttony, Greed, Sloth, Wrath, Pride, Lust, and Envy.

    Seven Deadly Sins: Gluttony, Greed, Sloth, Wrath, Pride, Lust, and Envy.七宗罪:暴食.贪婪.懒惰.暴怒.傲慢.色欲.妒忌.

  4. CF891E [数学题]

    1.答案=初始乘积-最终乘积的期望.然后直接dp+ntt是O(nklogk) 2.考虑展开式子ans=sum(a[i]-b[i]),大概感受一下未知数个数相同的项系数相同,问题在于如何求系数 3.没思 ...

  5. *Codeforces891E. Lust

    $n \leq 5000$的数列,$k \leq 1e9$次操作,每次随机选一个数-1,然后把其他数的积加入答案.问最后答案期望,$mod \ \ 1e9+7$. 略微观察可以发现答案=初始数列的积- ...

  6. Codeforces 891E - Lust(生成函数)

    Codeforces 题面传送门 & 洛谷题面传送门 NaCly_Fish:<简单>的生成函数题 然鹅我连第一步都没 observe 出来 首先注意到如果我们按题意模拟那肯定是不方 ...

  7. Bible

    001 Love your neighbor as yourself.         要爱人如己.--<旧·利>19:18      002 Resentment kills a foo ...

  8. Base64编码简介

      基本概念   Base64这个术语最初是在“MIME内容传输编码规范”中提出的.Base64不是一种加密算法,虽然编码后的字符串看起来有点加密的赶脚.它实际上是一种“二进制到文本”的编码方法,它能 ...

  9. nullcon HackIM 2016 -- Programming Question 2

    Your simple good Deeds can save you but your GREED can kill you. This has happened before. This gree ...

随机推荐

  1. java后台简单从腾讯云下载文件通知前端以附件的形式保存

    腾讯云对象存储和阿里云差不多 这是我的配置 /** * 腾讯云client * @return COSClient */ public static COSClient getCOSClient() ...

  2. Java中常用到的文件操作那些事(一)——替换doc文档模板,生成真实合同案例

    工作中,我们时常会遇到一些操作文件的操作,比如在线生成合同模板,上传/下载/解析Excel,doc文档转为pdf等操作.本文就已工作中遇到的在线生成合同为例,简要地介绍一种文档替换写法. 本文目的:给 ...

  3. 基于datax的数据同步平台

    一.需求 由于公司各个部门对业务数据的需求,比如进行数据分析.报表展示等等,且公司没有相应的系统.数据仓库满足这些需求,最原始的办法就是把数据提取出来生成excel表发给各个部门,这个功能已经由脚本转 ...

  4. 使用TortoiseSVN客户端管理IntelliJ IDEA项目的方法

    使用TortoiseSVN客户端管理IntelliJ IDEA项目的方法 今天在打开一个使用SVN管理的项目时,IntelliJ IDEA提示: Can't use Subversion comman ...

  5. leetcode-852-山脉数组的峰顶索引

    题目描述: 我们把符合下列属性的数组 A 称作山脉: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... ...

  6. HTML02--引用样式、表格、列表、div布局

    接上一篇“HTML01随笔” 1.使用样式:    内联样式:标签中使用style属性    内部样式:<head>使用<style type="text/css" ...

  7. SpringBoot整合JdbcTemplate连接Mysql

    import java.io.IOException; import javax.sql.DataSource; import org.apache.ignite.IgniteSystemProper ...

  8. windows下Composer因php_openssl扩展缺失而安装失败

    Composer(https://getcomposer.org/)是PHP下的一个依赖管理工具.你可以在你的项目中声明你所需要用到的类库,然后Composer会在项目中为你安装它们.如果你了解Nod ...

  9. (转)Python3 日期和时间

    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. ...

  10. ServiceLoader解读

    SPI的全名为Service Provider Interface.普通开发人员可能不熟悉,因为这个是针对厂商或者插件的.在java.util.ServiceLoader的文档里有比较详细的介绍. 简 ...