题目大意
现在有N个数,没个数有个权值
最后输出ans∗∏ni=2i∗(i−1)2。
N≤105
Vali≤103
解题思路
我们考虑期望的计算,是每个数贡献的和。因为选每个数的概率是一样的,所以这N个数没有本质上的区别,我们可以一起考虑。那么我们就考虑在第
程序
//YxuanwKeith
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 1e5 + 5;
const int Mo = 1e9 + 7;
int N, Inv[MAXN];
int Power(int x, int y) {
int Ans = 1;
for (; y; y >>= 1, x = 1ll * x * x % Mo)
if (y & 1) Ans = 1ll * Ans * x % Mo;
return Ans;
}
int main() {
scanf("%d\n", &N);
for (int i = 1; i <= N; i ++) Inv[i] = Power(i, Mo - 2);
int All = 0;
for (int i = 1; i <= N; i ++) {
int Now;
scanf("%d\n", &Now);
All = All + Now;
}
int Ans = 0;
for (int i = 2; i <= N; i ++)
Ans = (Ans + 1ll * All * Inv[i] % Mo * 2 % Mo) % Mo;
for (int i = 2; i <= N; i ++)
Ans = 1ll * Ans * i % Mo * (i - 1) % Mo * Inv[2] % Mo;
printf("%d\n", Ans);
}