$n \leq 5000$的数列,$k \leq 1e9$次操作,每次随机选一个数-1,然后把其他数的积加入答案。问最后答案期望,$mod \ \ 1e9+7$。

略微观察可以发现答案=初始数列的积-最终数列的积。所以就是求最终数列的积的期望。证明的话,可以归纳法,

$新答案=(k次操作后的数列-(k+1)次操作后的数列)+(原数列-k次操作后的数列)$

$=原数列-(k+1)次操作后的数列$。

接下来就求最终数列的积了。$b_i$--第$i$个数减少的次数,这里要枚举所有$b_i$,然后$E$表示最终数列积的期望,$E=\sum_{\sum_{i=1}^nb_i=k}\frac{\frac{k!}{\prod_{1}^{n}b_i}}{n^k}\prod_{i=1}^{n}(a_i-b_i)=\frac{k!}{n^k} \sum_{\sum_{i=1}^n b_i=k} \frac{a_i-b_i}{b_i!}$

$\sum b_i=k$的条件容易让人联想到:多个多项式乘积的第$k$项系数。那就把$\frac{k!}{n^k}$先不理了,转生成函数:

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

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

$=\prod_{i=1}^{n}(a_i-x)e^x$

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

非常好。现求它的第$k$项系数。后面那坨由于$n$不大直接$n^2$dp一下即可。($f(i,j)$--前$i$个括号里有$j$个选了常数项)设其第$i$项系数$c_i$。

前面$e^{nx}$直接泰勒展开。

然后两个多项式相乘,就得到$_{[x^k]}F(x)=\sum_{i=0}^{n}c_i\frac{n^{k-i}}{(k-i)!}$

然后再乘上之前丢掉的$\frac{k!}{n^k}$,得到$E=\sum_{i=0}^{n}c_i\frac{k^{\underline{i}}}{n^i}$。搞定。

*Codeforces891E. Lust的更多相关文章

  1. 【CF891E】Lust 生成函数

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

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

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

  3. CF891E Lust

    传送门 题目大意 你有 \(n\) 个数 \(a_1,a_2...a_n\) 要进行 \(k\) 次操作 每次随机选择一个数 \(x\),使得答案加上 \(\prod_{i \neq x}a_i\) ...

  4. CF891E Lust 生成函数

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

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

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

  6. Bible

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

  7. Base64编码简介

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

  8. 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 ...

  9. BZOJ1695 : [Usaco2007 Demo]Walk the Talk

    观察单词表可以发现: 对于长度为3的单词,前两个字母相同的单词不超过7个 对于长度为4的单词,前两个字母相同的单词不超过35个 于是首先$O(26*26*nm)$预处理出 s1[x][i][j]表示( ...

随机推荐

  1. scanf("%s",s)与gets(s)

    #include <stdio.h> void fun(char s[]) {; while(s[i]!='\0') {i++;} printf("%d",i);} v ...

  2. 看paper的网址

    http://www.arxiv-sanity.com/ https://scirate.com/ google搜cvpr open access.iccv open access

  3. python之道07

    2.用户输入一个数字,判断一个数是否是水仙花数. 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数. 那这个数就是一个水仙花数, 例如: 153 = 1******3 + 5****** ...

  4. ios多线程原理及runloop介绍

    一.线程概述 有些程序是一条直线,起点到终点:有些程序是一个圆,不断循环,直到将它切断.直线的如简单的Hello World,运行打印完,它的生命周期便结束了,像昙花一现那样:圆如操作系统,一直运行直 ...

  5. HDU 3790 (最短路 + 花费)

    题意: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. #include<bits/stdc ...

  6. 哈夫曼树:HDU5884-Sort(队列、哈夫曼树)

    Sort Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) 题目链接:http://ac ...

  7. C#中何时使用dynamic

    背景:比如说,有一个方法,有很多参数,且有时候只需要其中的某几个参数,有时候需要使用全部,甚至有时候一个都不需要,这时候写一个长长的参数列表一点都不酷,且容易 出错,这时候就需要考虑C#的dynami ...

  8. Android自动化测试Uiautomator--UiDevice接口简介

    Uiautomator主要分为UiDevice, UiObject, UiScrollable, UiSelector, UiCollection几个类. getUiDevice()方法可以得到一个U ...

  9. ThreadLocalClient小应用

    今天遇到hibernate.find就会进行权限配置,如果某处想要跳过权限配置,则可以如下 ThreadLocalClient.get().envParamMap.put(DataAuthority. ...

  10. 00049_super关键字

    1.子父类中构造方法的调用 (1)在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句: (2)格式 调用本类中的构造方法 this(实参列表); ...