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;
    }
    
  • 相关阅读:
    Java环境变量的配置
    Vim的使用
    codeforces round506(div3)A. Many Equal Substrings
    codeforces round 531(div3) D. Balanced Ternary String
    codeforces Manthan, Codefest 18 (rated, Div. 1 + Div. 2) D. Valid BFS
    codeforces codefest18(div1+div2) B. Reach Median
    D. Sum in the tree codeforces round#530(div2)
    codeforces round 508(div2) D. Slime
    codeforces goodbye 2018 C. New Year and the Sphere Transmission D. New Year and the Permutation Concatenation
    C. Classy Numbers cf edu round50
  • 原文地址:https://www.cnblogs.com/QuantAsk/p/14602416.html
Copyright © 2011-2022 走看看