Solution

每次得到的值可以看做操作后整个序列的乘积减去操作前整个序列的乘积,这样就把问题转化为求最后数列的乘积减去开始数列的乘积。
把式子列出来,设bib_ibi​为aia_iai​被减去的值,得到E=1nk×k!Πbi!×Π(ai−bi)E={1\over n^k}\times {k!\over \Pi b_i!}\times {\Pi (a_i-b_i)}E=nk1​×Πbi​!k!​×Π(ai​−bi​)
考虑每个数的贡献,因为最后总共是kkk轮,考虑用生成函数统计贡献,每个函数第iii项表示这个数被减了iii次的贡献,最后把nnn个乘起来,第kkk项就是我们答案。即Fi(x)=∑ai−jjxjFi(x)=\sum {a_i-j\over j}x^jFi(x)=∑jai​−j​xj
用泰勒展开化简一下,得Fi(x)=(ai−x)exFi(x)=(a_i-x)e^xFi(x)=(ai​−x)ex
nnn个相乘得到enxΠ(ai−x)e^{nx}\Pi(a_i-x)enxΠ(ai​−x)
把enxe^{nx}enx展开∑(nx)ii!Π(ai−x)\sum {(nx)^i\over i!}\Pi(a_i-x)∑i!(nx)i​Π(ai​−x)
至此已经可以暴力算出第kkk项系数了,复杂度O(n2)O(n^2)O(n2)。

Code

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pa pair<int,int>
const int Maxn=5010;
const int inf=2147483647;
const int mod=1000000007;
int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();return x*f;
}
void upd(int&x,int y){x+=y;if(x>=mod)x-=mod;}
int Pow(int x,int y)
{if(!y)return 1;int t=Pow(x,y>>1),re=(LL)t*t%mod;if(y&1)re=(LL)re*x%mod;return re;
}
int n,k,a[Maxn],f[Maxn],ans=0,s=1;//f[x]x个ai的乘积之和
int main()
{n=read(),k=read();f[0]=1;for(int i=1;i<=n;i++){a[i]=read();s=(LL)s*a[i]%mod;for(int j=i;j;j--)upd(f[j],(LL)a[i]*f[j-1]%mod);}for(int i=0;i<=n;i++)if((n-i)&1)f[i]=(mod-f[i])%mod;int inv=Pow(n,mod-2);for(int i=0;i<=min(n,k);i++){int t=1;for(int j=k;j>k-i;j--)t=(LL)t*j%mod;upd(ans,(LL)f[n-i]*t%mod*Pow(inv,i)%mod);}printf("%d",(s-ans+mod)%mod);
}

Codeforces 891E. Lust 生成函数相关推荐

  1. Codeforces 891E Lust 生成函数

    题意 现在给你一有n个整数的序列a[],有一个初始为0的值res,重复下面的过程k次: "随机选择一个[1,n]之间的下标x,res加上所有满足i≠x的a[i]的乘积,然后将a[x]减去1& ...

  2. CodeForces 891E Lust(生成函数)

    大致题意:给出一个数列{an},每次随机的选择一个数字ai,产生出了ai之外其余所有数字之积的贡献,然后ai减一.现在进行k次这样的操作,问最后者k次操作产生的贡献之和是多少. 这个贡献看起来很复杂, ...

  3. Codeforces 891E Lust

    Description 给出一个长度为nn的数组aa,有一个计数器resres,接下来进行kk次操作,每次操作等概率的选择[1,n][1,n]中的某个数ii,然后resres加上∑j≠iaj\sum_ ...

  4. codeforces 891E Lust 题解

    题目传送门 题目大意: 给出一个长度为 nnn 的序列,进行 kkk 次操作,每次随机选取一个 aia_iai​,让答案加上 aaa 序列中的其他数的乘积,然后让 ai−1a_i-1ai​−1,问最后 ...

  5. 【CF891E】Lust 生成函数

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

  6. [生成函数][DP] Codeforces 891 E. Lust

    SolutionSolutionSolution 设最后是这个样子 a=(ai−bi)a=(ai−bi)\textbf{a}=(a_i-b_i) ,可以通过数学归纳得到 res=∏iai−∏i(ai− ...

  7. 【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​=j​ai​−( ...

  8. CodeForces 891 E.Lust(生成函数)

    Description 给出一长度为nnn的序列a1,...,an" role="presentation" style="position: relative ...

  9. Lust(Codeforces Round #446 Div.1-891E)(母函数\生成函数)

    文章目录 题目 思路 代码 题目 你有n个数 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​ ,要进行 kkk 次操作,每次在 111 ~ nnn 中随机选择一个 ...

最新文章

  1. angularjs的双向绑定原理实现
  2. html5基础知识点字体属性
  3. sql优化技巧_使用这些查询优化技巧成为SQL向导
  4. 让一让,神州泰岳要进化了
  5. 对有些反编译不成功的apk,请更新最新的apktool.jar、 dex2jar试试
  6. c#图片色阶调整、亮度调整
  7. mysql的本地id可以随便设置马_Mysql主从复制原理及搭建
  8. Java 定时任务-最简单的3种实现方法
  9. linux樱桃树软件名字,春天开花的树及名称
  10. 韩国职业选手风格分析
  11. mysql 交换 表分区_mysql分区表分区数据和普通表交换
  12. 商标变更的重要性不及时变更的损失
  13. OpenCV这么简单为啥不学——1.5、解决putText中文乱码问题
  14. 隐藏Spring Elements
  15. 认识IE6的隐私让上网冲浪更安全(转)
  16. vue3 路由的使用
  17. el-form 验证规则里prop一次验证两个或多个值
  18. python tk库
  19. CH450/TM1637 驱动调试
  20. “Steem夺权”引发大讨论,交易所会不会控制公链治理?

热门文章

  1. 如何删除.nfs00000xxxx文件
  2. 数据结构之[关键路径]以及[拓扑算法优化]
  3. 数据库系统概念 | 第三章:SQL介绍
  4. 一个笼子里面关了鸡和兔子(鸡有2 只脚,兔子有4 只脚,没有任何例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。
  5. 斐波那契数列的通项公式
  6. 蚂蚁上市:P7可获1200万元期权,酸酸酸酸酸...
  7. MBA案例分析(行销与营销之营销一)
  8. Born-Again Neural Networks论文初读
  9. 贵州学业水平计算机考试真题,贵州省2017年7月普通高中学业水平考试数学试卷(真题卷附全解析)...
  10. P35页作业 信管1181霍煜成