正题

题目链接: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. 08.SpringMVC之方法返回值

    返回ModelAndView Controller类方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view.之前我就已讲过,在此并不过多赘述. 返回void 在Cont ...

  2. 通用Mapper学习

    <通用Mapper>部分注解    @Table(name="tableName")用法: 这个注解写在实体类的上面 指定数据库表的名字作用: 建立实体类和数据库表之间 ...

  3. CentOS7中apache的部署与配置

    一.apache的部署 输入命令 yum list | grep httpd 查看可安装的软件包,选择"httpd.x86_64"安装. 输入命令 yum install http ...

  4. vue3.0入门(四):组件

    组件 组件基础 <my-counter></my-counter> const app = Vue.createApp({ // 根组件 data() { return {} ...

  5. 在ES5中模拟类

    1.Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__. var _this = Object.create(fn.prototype);这句代码的 ...

  6. mysql switch语句

    SELECT CASE the_order_status WHEN 4 THEN '待收货' WHEN 5 THEN '已收货' ELSE '其他' END AS statuss ,order_id ...

  7. SpringBoot笔记(6)

    一.数据访问(SQL) 1.数据源的自动配置-HikariDataSource 1.导入JDBC场景 <dependency> <groupId>org.springframe ...

  8. java交互Scanner类

    用next方法接收 import java.util.Scanner; public class Demo01 { public static void main(String[] args) { / ...

  9. 五分钟搞懂MySQL索引下推

    大家好,我是老三,今天分享一个小知识点--索引下推. 如果你在面试中,听到MySQL5.6"."索引优化" 之类的词语,你就要立马get到,这个问的是"索引下推 ...

  10. client-go实战之五:DiscoveryClient

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...