大佬

题目描述

辣鸡 ljh   NOI 之后就退役了,然后就滚去学文化课了。 
他发现 katarina 大佬真是太强了,于是就学习了一下 katarina 大佬的做题方法。 
比如这是一本有 n 道题的练习册, katarina 大佬每天都会做 k 道题。 
第一天做第 1~k 题,第二天做第 2~k + 1 题……第 n − k + 1 天做第 n − k + 1~n 道题。 
但是辣鸡 ljh 又不想太累,所以他想知道 katarina 大佬做完这本练习册的劳累度。 
每道题有它的难度值,假设今天 katarina 大佬做的题目中最大难度为 t ,那么今天 katarina 大佬的劳累度就是 wt r ,做完这本书的劳累值就是每天的劳累值之和。 
但是辣鸡 ljh 一道题都不会,自然也不知道题目有多难,他只知道题目的难度一定在 1~m 之间随机。 
他想让即将参加 NOIP 的你帮他算算 katarina 大佬做完这本书的劳累值期望 

输入

第一行,三个整数 n, m, k  
第二行, m 个整数表示 wt1,...,wtm. 

输出

输出劳累值期望对 1000000007 取模的值。 

样例输入

2 2 2
1 2

样例输出

750000007

提示

有 {1,1}, {1,2}, {2,1}, {2,2} 四种可能,期望为7/4;

#include<bits/stdc++.h>
#define ll long long
#define mode 1000000007
using namespace std;

ll qpow(ll p,ll q)
{
    ll f=1;
    while(q)
    {
        if(q&1)f=f*p%mode;
        p=p*p%mode;
        q>>=1;
    }
    return f%mode;
}

int main()
{
    int n,m,k;
    ll w[555];
    ll ans=0;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1; i<=m; ++i)
    {
        scanf("%lld",&w[i]);
        ans=(ans+(w[i]*(qpow(i,k)-qpow(i-1,k)+mode)%mode)%mode)%mode;
    }
    ans=(ans *(n - k + 1) % mode) * qpow(qpow(m,k), mode - 2)%mode;
    cout<<ans<<endl;

    return 0;
}

 

posted @ 2018-02-08 23:02  轻狂上邪  阅读(233)  评论(0编辑  收藏  举报