【CF891E】Lust 生成函数
【CF891E】Lust
题意:给你一个长度为n的序列$a_i$,对这个序列进行k次操作,每次随机选择一个1到n的数x,令$res+=\prod\limits_{i!=x}a_i$(一开始res=0),然后$a_i$--。问最终res的期望值。答案在模意义下对$10^9+7$取模。
$n\le 5000,k\le 10^9$
题解:首先需要发现,假如第i个数被减的次数为$b_i$,则$res=\prod\limits_i a_i-\prod\limits_i (a_i-b_i)$。这个用归纳法容易证明。
于是问题就变成了求$[{\sum b_i=k}]{1\over n^k}{k!\over \prod b_i!}\prod\limits_{i}(a_i-b_i)$
设生成函数$F_i(x)=\sum\limits_{j}{(a_i-j)x^j\over j!}$,它等于
$F_i(x)=\sum\limits_j{a_ix^j\over j!}-\sum\limits_j{x^j\over (j-1)!}\\=\sum\limits_{j}{a_ix^j\over j!}-x\sum\limits_{j}{x^j\over j!}\\=\sum\limits_j{(a_i-x)x^j\over j!}=(a_i-x)e^j$
所以$\prod\limits_i F_i(x)=e^{nj}\prod\limits_i (a_i-x)$。我们可以暴力求出$\prod\limits_i (a_i-x)$的每一项系数,设其为$c_i$。剩下的就是求$e^{nj}$的第$k-n,k-n+1...k$项系数。显然第i项系数是$n^i\over i!$,再乘上前面的${k!\over n^k}$就变成了$\sum\limits_{i=0}^n{c_i}n^{-i}\prod\limits_{j=k-i}^kj$
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=5010;
typedef long long ll;
const ll P=1000000007;
ll ine[maxn],v[maxn],f[maxn];
int n;
ll k,ans;
int main()
{int i,j;scanf("%d%lld",&n,&k);for(ans=i=1;i<=n;i++) scanf("%lld",&v[i]),ans=ans*v[i]%P;f[0]=1;for(i=1;i<=n;i++){for(j=i;j>=1;j--){f[j]=(f[j]*v[i]-f[j-1])%P;}f[0]=f[0]*v[i]%P;}ine[0]=ine[1]=1;for(i=2;i<=n;i++) ine[i]=P-(P/i)*ine[P%i]%P;ll t=1,tmp=1;for(i=0;i<=n&&i<=k;i++){ans=(ans-f[i]*t%P*tmp)%P;t=t*ine[n]%P,tmp=tmp*(k-i)%P;}printf("%lld",(ans+P)%P);return 0;
}
转载于:https://www.cnblogs.com/CQzhangyu/p/8594955.html
【CF891E】Lust 生成函数相关推荐
- [生成函数阶段性小结][CF891E]Lust
问题描述 给你一个长度为n的数组a[],还有操作数K,每次操作你在下标[1..n]中等概率选择一个下标x,贡献+=∏i!=xa[i]∏i!=xa[i]\prod_{i!=x}a[i],然后a[x]-= ...
- Codeforces 891E. Lust 生成函数
Solution 每次得到的值可以看做操作后整个序列的乘积减去操作前整个序列的乘积,这样就把问题转化为求最后数列的乘积减去开始数列的乘积. 把式子列出来,设bib_ibi为aia_iai被减去的值 ...
- Codeforces 891E Lust 生成函数
题意 现在给你一有n个整数的序列a[],有一个初始为0的值res,重复下面的过程k次: "随机选择一个[1,n]之间的下标x,res加上所有满足i≠x的a[i]的乘积,然后将a[x]减去1& ...
- cf891E Lust
非常有趣( 考虑设bnb_nbn为第nnn个数被减去的次数,那么对于KKK次之后的某个局面,答案就是 ∏i=1nai−∏i=1n(ai−bi)\prod_{i=1}^n a_i - \prod_{i ...
- [CF891E]Lust
题目大意 一个序列a,做k次下列操作: 1.随机一个下标x,答案加上Πni=1,i!=xai\Pi_{i=1,i!=x}^na_i 2.将axa_x减一. 求答案的期望. 做法 设bib_i表示最终a ...
- CF891E Lust(推式子,EGF)
题目大意:n个数,进行k次操作,每次对ax进行减1操作,然后对答案加上除ax外所有数的乘积,求期望,对1e9+7取模. 思路: 每次操作为res+=∏i!=xaires+=\prod_{i!= ...
- CodeForces 891E Lust(生成函数)
大致题意:给出一个数列{an},每次随机的选择一个数字ai,产生出了ai之外其余所有数字之积的贡献,然后ai减一.现在进行k次这样的操作,问最后者k次操作产生的贡献之和是多少. 这个贡献看起来很复杂, ...
- [生成函数][DP] Codeforces 891 E. Lust
SolutionSolutionSolution 设最后是这个样子 a=(ai−bi)a=(ai−bi)\textbf{a}=(a_i-b_i) ,可以通过数学归纳得到 res=∏iai−∏i(ai− ...
- 【Codeforces 891 E】 Lust(生成函数)
传送门 考虑每次贡献可以差分成aj∏i≠jai−(aj−1)∏i≠jaia_j\prod_{i\not=j}a_i-(a_j-1)\prod_{i\not=j}a_iaj∏i=jai−( ...
最新文章
- 【Graph4NLP】阿尔伯塔大学博士毕业论文:基于图结构的自然语言处理
- Caffe学习记录(十二) ICNet分割网络学习二
- 月薪没过20K的程序员要注意了!(文末送书)
- java thread signal_java — Thread之CountDownLatch的使用
- [转载] python元组 tuple
- 解决remix在线编译器连接本地私有链环境不成功的问题
- note同步不及时 one_解决无法同步 OneNote 的问题
- 技师学院计算机老师,技师学院计算机工程系组织开展观摩课活动
- 新域名正在备案,静候佳音
- golang内幕之协程状态切换
- 【协议】NVMe over RoCE 初探 SATA接口(AHCI协议)、PCIe 接口(NVMe 协议)
- “打开文件所在位置”提示“找不到应用程序”的解决方案
- java哪一个可以编译,下列Java命令中,哪一个可以编译HelloWorld.java文件( )
- 西瓜创客和核桃编程之间,哪个更靠谱?西瓜创客一年学费多少?
- 校验导入的Excel文件标题行与要求的标题行是否一致
- Fater-Rcnn原理详解
- app毕业设计开题报告题目Uniapp实现的Android的校园二手商品交易平台计算机毕业论文
- svnserve配置
- python 银行数据分析_银行业务概述_Python数据分析行业案例课程--信用评分方法_数据挖掘与分析视频-51CTO学院...
- 多光纤推接 (MPO) 连接器