正题

题目链接:https://www.luogu.com.cn/problem/CF891E


题目大意

\(n\)个数字的一个序列\(a_i\),每次随机选择一个让它减去一。然后贡献加上所有其他\(a_i\)的乘积。

执行\(k\)次,求贡献答案。

\(1\leq n\leq 5000,0\leq a_i,k\leq 10^9\)


解题思路

这个操作很麻烦,但是其实答案就是开始时所有\(a_i\)的乘积减去结束时所有\(a_i\)的乘积。

设第\(i\)个数减去了\(b_i\)次,就是求\(\prod_{i=1}^na_i-\prod_{i=1}^n(a_i-b_i)\)的期望,考虑怎么求后面那个东西。

推一下式子不难发现对于一组\(b_i\)对期望的贡献就是

\[\frac{1}{n^k}\frac{k!}{\prod_{i=1}^n(b_i!)}\prod_{i=1}^n(a_i-b_i)
\]

(总方案×可重排方案×贡献)

把\(\prod_{i=1}^n(b_i!)\)丢进去会有很神奇的结果

\[\Rightarrow \frac{k!}{n^k}\prod_{i=1}^n\frac{a_i-b_i}{b_i!}
\]

因为每种方案都要求和,后面那个东西显然可以生成函数搞,设

\[\widehat{f_z}(x)=\sum_{i=0}^n(a_z-i)\frac{x^i}{i!}=\sum_{i=0}^\infty a_z\frac{x^i}{i!}-\sum_{i=0}^\infty i\frac{x^i}{i!}
\]

好像就搞不动了,前面那个是\(a_ze^{x}\),其实后面那个把\(i\)抵消掉阶乘就是\(xe^{x}\)

\[\widehat{f_z(x)}=(a_z-x)e^x
\]

然后\(\widehat{F}=\prod_{i=1}^n\widehat{f_z}\),可以暴力\(O(n^2)\)乘出\(\prod_{i=1}^n(a_z-x)\)这部分,记为\(\sum_{i=0}^{\infty}c_ix^i\)。

然后展开后面的\(e^x\)就有

\[\widehat{F(x)}[x^k]=\sum_{i=0}^kc_{i}\frac{n^{k-i}}{(k-i)!}
\]

然后

\[ans=\sum_{i=0}^kc_{i}\frac{k!}{(k-i)!n^i}
\]

就好了,时间复杂度\(O(n^2)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=5100,P=1e9+7;
ll n,k,f[N],ans;
ll power(ll x,ll b){
ll ans=1;
while(b){
if(b&1)ans=ans*x%P;
x=x*x%P;b>>=1;
}
return ans;
}
signed main()
{
scanf("%lld%lld",&n,&k);f[0]=1;
for(ll i=1;i<=n;i++){
ll x;scanf("%lld",&x);
for(ll j=i;j>=1;j--)
f[j]=(f[j]*x-f[j-1]+P)%P;
f[0]=f[0]*x%P;
}
ll tt=1,inv=power(n,P-2);
for(ll i=0;i<=n;i++){
ans=(ans+f[i]*tt%P)%P;
tt=tt*inv%P*(k-i)%P;
}
printf("%lld\n",(f[0]-ans+P)%P);
return 0;
}

CF891E-Lust【EGF】的更多相关文章

  1. P2012-拯救世界2【EGF】

    正题 题目链接:https://www.luogu.com.cn/problem/P2012 题目大意 \(12\)种东西排列成长度为\(n\)的序列,要求前四种出现奇数次,后四种出现偶数次,求方案. ...

  2. POJ3734-Blocks【EGF】

    正题 题目链接:http://poj.org/problem?id=3734 题目大意 用思种颜色给\(n\)个格子染色,要求前两种颜色出现偶数次,求方案. \(1\leq T\leq 100,1\l ...

  3. 【BZOJ4555】求和(多种解法混合版本)

    [BZOJ4555]求和(多种解法混合版本) 题面 BZOJ 给定\(n\),求 \[f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i}S(i,j)\times 2^j \times ...

  4. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  5. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  6. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  7. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  8. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  9. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

随机推荐

  1. Azkaban入门(启动一个Simple Example)

    Azkaban简介 azkaban是一个开源的任务调度系统 Azkaban是一套简单的任务调度服务,整体包括三部分webserver.dbserver.executorserver. 开发语言为Jav ...

  2. Longhorn,企业级云原生容器分布式存储 - 支持 ReadWriteMany (RWX) 工作负载(实验性功能)

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 企业级云原生容器分布式存储解决方案设计架构和概念 Longhorn 企业级云原生容器分 ...

  3. 用宏实现HEX到ASCII ,ASCII 到HEX

    #define HEX2ASCII(value, data)  do{  \            value = (value > 0x09)?(value+0x7):value; \     ...

  4. docker下gitlab(redis)安装配置使用(完整版)

    ps:如果是云主机,需添加安全组开放相应端口(关联相应实例),防火墙开放端口或直接关闭 https://www.jianshu.com/p/080a962c35b6 将其中external_url换为 ...

  5. linux备份恢复命令

    dump 发行版不自带,需要 yum 或 apt 安装.安装时 restore 也会自动安装. 支持分区和增量备份(仅支持分区增量,目录备份不支持增量).(第一次完全备份,第二次及以后只备份增加和修改 ...

  6. vue 优化hash持久化缓存

    公司用的是vue最近在学习react的打包时发现react会额外生成一个runtimeChunk,不知道具体原因所以查资料学习了下, 这里是runtime的功能,文章地址:https://sebast ...

  7. PB代码转JAVA工具

    开发了PB代码转JAVA的工具,正在做datawindow和datastore的处理.以下是目前已经能处理的功能: 1.自动从PBL中获取对象的函数或事件代码 a)可以自动获取实例变量.函数或事件的入 ...

  8. vue系统总结2

    注册组件 组件其他补充 组件数据存放 父子组件通信 父级向子级传递信息 子级向父级传递信息 插槽slot 1.1什么是组件化 1.2 注册组件的基本步骤 创建组件构造器 注册组件 使用组件 <d ...

  9. JavaScript高级程序设计学习笔记之事件

    1.事件流 事件流描述的是从页面中接收事件的顺序. 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播 ...

  10. Ajax技术---核心XMLHttpRequest对象

    Ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式. (一)ajax技术的意义 我 ...