题目描述
辣鸡 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 大佬做完这本书的劳累值期望
他发现 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.
第二行, 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; }