zoukankan      html  css  js  c++  java
  • CF891ELust【EGF】

    正题

    题目链接: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;
    }
    
  • 相关阅读:
    iOS 音频视频图像合成那点事
    Android低功耗蓝牙(BLE)使用详解
    android实现超酷的腾讯视频首页和垂直水平网格瀑布流一揽子效果
    基于vue单页应用的例子
    Android 6.0 超级简单的权限申请 (Permission)
    ubuntu创建Centos7镜像&&配置运行环境
    Scikit-learn方法使用总结
    解决TensorFlow最新代码编译错误问题
    jQuery 基础
    数据交换格式 —— JSON(JavaScript Object Notation)
  • 原文地址:https://www.cnblogs.com/QuantAsk/p/14602416.html
Copyright © 2011-2022 走看看