【YBT2022寒假Day6 A】【luogu CF891E】随机减法 / Lust(EGF)

随机减法 / Lust

题目链接:YBT2022寒假Day6 A / luogu CF891E

题目大意

给你一个数组,每次随机选一个数减一,然后贡献增加除了这个数以外所有数的乘积,然后问你操作 k 次之后期望的贡献和。

思路

它这个除了以外某个数以外的乘积很不好搞,我们考虑一定把它弄成跟全部乘积有关的。
然后你发现每次减一,那全部乘积就减少了除了这个数以外所有数的乘积。

那每次的贡献就是全部乘积的减小量,那总贡献就是全部乘积总共减少的量,也就是: ai(aibi)bik 次操作选了 ai 多少次)
然后 bi 是每个的次数,你还要放的顺序,所以要乘上 k!bi!

然后因为是期望,所以要乘概率:1nk
所以我们要得到的就是:aib1nkk!bi!(aibi)

然后把 b 的放在一起:k!nkaibibi!
你发现右边这个 里面的好像是个 EGF 的性质,考虑试试:

f(i)=j=0aijj!xj
f(i)=j=0(aij!xjx(j1)!xj1)
f(i)=j=0aixj!xj=(aix)ex

然后你是要每一项乘起来:
F(x)=i=1nf(i)=enxi=1n(aix)
F(x)=i=0nixii!i=1n(aix)

那么可以看出 i=1n(aix) 是一个多项式,而且暴力算的复杂度是 O(n2),是可以的。
那么假设我们得出来的结果是:cixi
F(x)=i=0nixii!i=0cixi

那我们答案要的自然是第 k 项:
[xk]F(x)=i=0knkixki(ki)!cixi=i=0knkici(ki)!xk

然后我们带回去:
E=k!nk[xk]F(x)
=i=0kk!nknkici(ki)!xk
=i=0kk!cini(ki)!
=i=0k(ki+1)(ki+2)(...)(k)cini
(不能直接算阶乘,所以要拆开来抵消,每次在原来基础上乘新的数)

然后最后 aiE 即可。

代码

#include<cstdio> #define ll long long #define mo 1000000007 using namespace std; ll n, k, a[5001], sum, c[5001], cc[5001]; void get_C() { c[0] = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) cc[j] = c[j - 1]; for (int j = 0; j <= n; j++) c[j] = (c[j] * a[i] % mo - cc[j] + mo) % mo; } } ll ksm(ll x, ll y) { ll re = 1; while (y) { if (y & 1) re = re * x % mo; x = x * x % mo; y >>= 1; } return re; } int main() { // freopen("calculate.in", "r", stdin); // freopen("calculate.out", "w", stdout); scanf("%lld %lld", &n, &k); sum = 1; for (int i = 1; i <= n; i++) { scanf("%lld", &a[i]); sum = sum * a[i] % mo; } get_C(); ll xnfn = 0, tmp = 1, invn = ksm(n, mo - 2); for (int i = 0; i <= n; i++) { (xnfn += c[i] * tmp % mo) %= mo; (tmp *= invn * (k - i) % mo) %= mo; } printf("%lld", (sum - xnfn + mo) % mo); return 0; }

__EOF__

本文作者あおいSakura
本文链接https://www.cnblogs.com/Sakura-TJH/p/YBT2022Day6_A.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   あおいSakura  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示