• 大佬 (数学)


    这个题最难的是统计区间最大值。

    根据数学上正难则反,求啥设啥的原则,我们不妨设区间S的最大值为i

    辣么,该区间对答案的贡献是w[i],考虑这个区间出现的可能,显然区间一开始有(n-k+1)个位置,再看对于每个位置,要用1~i填满这个长度为k区间,

    显然是i^k,如果有不出现i的情况,减去即可。即i^k-(i-1)^k。

    然后我们就可以推出来了=> ans=Σ(i^k-(i-1)^k)*(n-k+1)*w[i]  /  m^k

    因为考虑的是答案贡献的所有可能,所以一定不会算重算漏

    既然是所有可能,直接统计即可。

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 const int mod=1000000007;
     5 int qpower(int a,int b)
     6 {
     7     int ans=1;
     8     for(;b;b>>=1,a=1ll*a*a%mod)
     9         if(b&1)ans=1ll*ans*a%mod;
    10     return ans;
    11 }
    12 int main()
    13 {
    14     int n,m,k,ans=0;
    15     scanf("%d%d%d",&n,&m,&k);
    16     if(k>n){puts("0");return 0;}
    17     for(int i=1;i<=m;i++){
    18         int a;
    19         scanf("%d",&a),
    20         (ans+=(1ll*a*(mod+qpower(i,k)-qpower(i-1,k))%mod*(n-k+1)%mod))%=mod;
    21     }
    22     cout<<1ll*ans*qpower(qpower(m,k),mod-2)%mod<<endl;
    23     return 0;
    24 }
    View Code
  • 相关阅读:
    <!--[if IE 9]>....<!end if-->
    背景颜色设置
    UIImageView 响应UIButton的点击事件
    响应键盘return事件
    iOS 封装数据请求,解析数据(异步)
    UIImageView 圆角
    JS 控制文本框必须输入值才能查询
    MVC4 @Html.Raw()
    JS加成显示
    随机生成人物名称
  • 原文地址:https://www.cnblogs.com/hzoi-kx/p/11266768.html
Copyright © 2020-2023  润新知