Lust(Codeforces Round #446 Div.1-891E)(母函数\生成函数)
文章目录
- 题目
- 思路
- 代码
题目
你有n个数 a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an ,要进行 kkk 次操作,每次在 111 ~ nnn 中随机选择一个数 xxx,使得res+=∏i!=xaires+=\prod_{i!= x}a_ires+=∏i!=xai ,然后 axa_xax 减少 111,求最后 resresres 值的期望,答案对 109+710^9+7109+7 取模。
数据范围:
1≤n≤5000,1≤k≤109,0≤ai≤1091\le n\le 5000,1\le k \le 10^9,0\le a_i\le 10^91≤n≤5000,1≤k≤109,0≤ai≤109
思路
我们考虑在某一个局面即将进行一次操作:
记现在 aia_iai 减少的次数为 bib_ibi ,我们选中 axa_xax
那我们计算一次答案贡献:
∏i!=x(ai−bi),同时bx+=1\prod_{i!=x}(a_i-b_i),同时b_x+=1i!=x∏(ai−bi),同时bx+=1
那么我们变形
((ax−bx)−(ax−(bx+1)))∗∏i!=x(ai−bi)((a_x-b_x)-(a_x-(b_x+1)))*\prod_{i!=x}(a_i-b_i)((ax−bx)−(ax−(bx+1)))∗i!=x∏(ai−bi)
∏i=1n(ai−bi)−(∏i=1n(ai−bi))∗(ax−(bx+1))\prod_{i=1}^n(a_i-b_i)-(\prod_{i=1}^n(a_i-b_i))*(a_x-(b_x+1))i=1∏n(ai−bi)−(i=1∏n(ai−bi))∗(ax−(bx+1))
我们记某一个局面 α=(b1,b2,...,bn)\alpha=(b_1,b_2,...,b_n)α=(b1,b2,...,bn)
我们记 f(α)=∏i=1n(ai−bi)f(\alpha)=\prod_{i=1}^n(a_i-b_i)f(α)=i=1∏n(ai−bi)
那么一次的贡献为: f(α)−f(β)f(\alpha)-f(\beta)f(α)−f(β)
初局面:
f(start)=∏i=1naif(start)=\prod_{i=1}^na_if(start)=i=1∏nai
于是类似于裂项相消的样子,我们只剩初局面和末局面
即
E=f(start)−∑k!nk∗∏i=1nbi!∗f(end)E=f(start)-\sum\frac{k!}{n^k*\prod_{i=1}^nb_i!}* f(end)E=f(start)−∑nk∗∏i=1nbi!k!∗f(end)
于是我们只需保证:∑i=1nbi=k\sum_{i=1}^nb_i=k∑i=1nbi=k,
化简后半段
∑k!nk∗∏i=1nbi!∗∏i=1(ai−bi)=k!nk∗∑∏i=1ai−bibi!\sum\frac{k!}{n^k*\prod_{i=1}^nb_i!}*\prod_{i=1}(a_i-b_i)=\frac{k!}{n^k}*\sum\prod_{i=1}\frac{a_i-b_i}{b_i!}∑nk∗∏i=1nbi!k!∗i=1∏(ai−bi)=nkk!∗∑i=1∏bi!ai−bi
发现这个似乎很难搞,我们考虑化简和指数型母函数构造:
G(x)=∏i=1n∑j=0+∞ai−jj!xjG(x)=\prod_{i=1}^n\sum_{j=0}^{+\infty}\frac{a_i-j}{j!}x^jG(x)=i=1∏nj=0∑+∞j!ai−jxj
=∏i=1n∑j=0+∞(aij!xj−jj!xj)=\prod_{i=1}^n\sum_{j=0}^{+\infty}(\frac{a_i}{j!}x^j-\frac{j}{j!}x^j)=i=1∏nj=0∑+∞(j!aixj−j!jxj)
=∏i=1n(∑j=0+∞aij!xj−∑j=0+∞xj!xj)=\prod_{i=1}^n(\sum_{j=0}^{+\infty}\frac{a_i}{j!}x^j-\sum_{j=0}^{+\infty}\frac{x}{j!}x^j)=i=1∏n(j=0∑+∞j!aixj−j=0∑+∞j!xxj)
=∏i=1n((ai−x)∗∑j=0+∞xjj!)=\prod_{i=1}^n((a_i-x)*\sum_{j=0}^{+\infty}\frac{x^j}{j!})=i=1∏n((ai−x)∗j=0∑+∞j!xj)
=∏i=1n((ai−x)∗ex)=\prod_{i=1}^n((a_i-x)*e^x)=i=1∏n((ai−x)∗ex)
=enx∏i=1n(ai−x)=e^{nx}\prod_{i=1}^n(a_i-x)=enxi=1∏n(ai−x)
我们的目标是求 G(x)G(x)G(x) 的第 kkk 项系数 fkf_kfk,考虑将后面直接 O(n2)O(n^2)O(n2) 拆成多项式形式(当然你会分治FFT O(nlog2n)O(nlog^2n)O(nlog2n)):
G(x)=enx∗∑i=0nci∗xiG(x)=e^{nx}*\sum_{i=0}^nc_i*x^iG(x)=enx∗i=0∑nci∗xi
前面拆开:
G(x)=(1+nx1!+(nx)22!+...)∗∑i=0nci∗xiG(x)=(1+\frac{nx}{1!}+\frac{(nx)^2}{2!}+...)*\sum_{i=0}^nc_i*x^iG(x)=(1+1!nx+2!(nx)2+...)∗i=0∑nci∗xi
我们要求第 kkk 项的系数 gkg_kgk:
gk=∑i=0nci∗nk−i(k−i)!g_k=\sum_{i=0}^nc_i*\frac{n^{k-i}}{(k-i)!}gk=i=0∑nci∗(k−i)!nk−i
回代到答案的后半段:
k!nk∗∑∏i=1ai−bibi!=k!nk∗gk\frac{k!}{n^k}*\sum\prod_{i=1}\frac{a_i-b_i}{b_i!}=\frac{k!}{n^k}*g_knkk!∗∑i=1∏bi!ai−bi=nkk!∗gk
=k!nk∗∑i=0nci∗nk−i(k−i)!=\frac{k!}{n^k}*\sum_{i=0}^nc_i*\frac{n^{k-i}}{(k-i)!}=nkk!∗i=0∑nci∗(k−i)!nk−i
我们知道 nnn 相较于 kkk 很小 于是继续化简:
=∑i=0nci∗Akini=\sum_{i=0}^nc_i*\frac{A_k^i}{n^i}=i=0∑nci∗niAki
最后这个式子我们可以考虑递推 O(n)O(n)O(n) 计算
总时间复杂度:O(n2)/O(nlog2n)O(n^2)/O(nlog^2n)O(n2)/O(nlog2n)
代码
#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<deque>
#include<cstdio>
#include<ctime>
#include<bitset>
#include<vector>
#include<climits>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long
#define ULL unsigned long long
LL read(){LL f=1,x=0;char c=getchar();while(c<'0'||'9'<c){if(c=='-')f=-1;c=getchar();}while('0'<=c&&c<='9') x=(x<<3)+(x<<1)+c-'0',c=getchar();return f*x;
}
#define MAXN 5000
#define INF 0x3f3f3f3f
#define Mod (LL)(1e9+7)
LL Pow(LL x,LL y){LL ret=1;while(y){if(y&1) ret=ret*x%Mod;x=x*x%Mod;y>>=1;}return ret;
}
LL a[MAXN+5],b[MAXN+5],c[MAXN+5];
int main(){LL n=read(),k=read(),ans=1;for(int i=1;i<=n;i++)a[i]=read(),ans=ans*a[i]%Mod;c[0]=1;for(int i=1;i<=n;i++){for(int j=0;j<i;j++)b[j]=c[j]*a[i]%Mod;for(int j=0;j<i;j++)b[j+1]=(b[j+1]-c[j]+Mod)%Mod;memcpy(c,b,sizeof(c));}LL f=0,t1=1,t2=1,invn=Pow(n,Mod-2);for(int i=0;i<=n;i++){f=(f+c[i]*t1%Mod*t2%Mod)%Mod;t1=t1*(k-i)%Mod,t2=t2*invn%Mod;}ans=(ans-f)%Mod;printf("%lld\n",(ans+Mod)%Mod);return 0;
}
Lust(Codeforces Round #446 Div.1-891E)(母函数\生成函数)相关推荐
- Codeforces Round #446 (Div. 1) B. Gluttony 构造 + 补集思想
传送门 文章目录 题意: 思路: 题意: 给你一个数组aaa,保证aaa中每个数都互不相同,让你构造一个数组bbb,满足对于任意的S=x1,x2,...,xk,1≤xi≤n,0≤k<nS={x_ ...
- 【Codeforces Round #446 (Div. 2) C】Pride
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 想一下,感觉最后的结果肯定是从某一段开始,这一段的gcd为1,然后向左和向右扩散的. 则枚举那一段在哪个地方. 我们设这一段中所有的 ...
- Codeforces Round #446 (Div. 2)
A. Greed time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
- Codeforces Round #563 (Div. 2)/CF1174
Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...
- 构造 Codeforces Round #302 (Div. 2) B Sea and Islands
题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...
- Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...
- Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...
- Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...
最新文章
- np301串口服务器修改ip,NP301 1路RS-232/485/422 TCP/IP 串口服务器
- 【Android 应用开发】 自定义 圆形进度条 组件
- Logistic Regression 模型简介
- 征集活动 | PMCAFF八周年,十万产品经理送祝福
- 韩国的计算机科学家,韩国科学技术院用普通相机为AR/VR复刻真实世界物理对象...
- chrome postman插件_收集了一些Chrome插件神器,助你快速成为老司机
- 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(1)--RANRAC
- Linux系统下软件包管理六
- 二叉树与树、森林之间的转换
- 赛门铁克发布第21期《互联网安全威胁报告》 揭示当前更为严峻的网络威胁现状...
- mtk添加更换华大北斗gps驱动
- STLink连接与资源下载
- 珠峰 - 郭永峰react课程 node es6 babel学习笔记
- 本地编译 全志a33 的步骤
- 通过DLL文件实现函数共有及通过调用_stdcall来减少程序文件的大小
- 解决win10下Photoshop2018CC手绘板画画变上下
- Android 10.0 蓝牙去掉传输文件的功能
- 在SQL Server 2000中设置OPTION (MAXDOP 1) 性能提高问题
- viper4android io错误,Go之Viper
- MQL4读取hst文件代码范例
热门文章
- Unable to locate tools jar Expected to find it in C /Progra
- 长沙小学计算机老师,2019下半年湖南长沙小学信息技术教师资格证面试试题考什么内容...
- ZOL桌面壁纸的提取
- 深圳Web前端学习:5G对Web前端发展的影响--千锋
- 关于px/rem/vw 之间的换算关系
- linux密匙登录免密码登录,另外推荐一个免费的vps网站
- [Demo示例]爬取豆瓣FM个人收藏歌曲“红心列表”
- 如何拥有一部属于自己的公网云服务器
- 图像超分辨率——LapSRN2017
- 霍因科技Hi-ETA Hi-SEAHILL加速大数据管理 赋能信创生态建设