• [AGC028B]Removing Blocks 概率与期望


    考虑算每一个位置在所有情况的期望值乘以全排列似乎就是答案.  

    那么对于 $i$,如果要由 $j$ 来贡献的话就要满足 $j$ 在 $i....j-1$ 之前先拿. 

    而在拿 $j$ 时,先于 $i...j-1$ 的概率就是 $frac{1}{|j-i|+1}$  

    直接对所有的 $j$ 加和,然后乘以个概率即可. 

    code: 

    #include <bits/stdc++.h>
    #define LL long long 
    #define N 100005     
    #define setIO(s) freopen(s".in","r",stdin)     
    using namespace std;
    const LL mod=1000000007; 
    LL a[N],n,inv[N],sum[N]; 
    LL fac(int p) 
    {
        LL ans=1ll; 
        for(int i=2;i<=n;++i) ans=ans*1ll*i%mod; 
        return ans; 
    }
    int main() 
    {
        // setIO("input"); 
        int i,j; 
        scanf("%d",&n);
        for(i=1;i<=n;++i) scanf("%lld",&a[i]);  
        sum[1]=inv[1]=1ll; 
        for(i=2;i<=n;++i) 
        {
            inv[i]=(mod-(mod/i)*inv[mod%i]%mod)%mod; 
            sum[i]=(sum[i-1]+inv[i])%mod;   
        }
        LL ans=0ll; 
        for(i=1;i<=n;++i) 
        {
            ans=(ans+a[i]*((sum[i]-sum[0]+sum[n-i+1]-sum[1]+mod)%mod)%mod)%mod; 
        }
        printf("%lld
    ",ans*fac(n)%mod);   
        return 0; 
    }
    

      

  • 相关阅读:
    第二次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
    第四次作业
    第三次作业
    第二次作业
    第一次大学作业
    第四次作业
  • 原文地址:https://www.cnblogs.com/guangheli/p/11756292.html
Copyright © 2020-2023  润新知