Road To The 3rd Building

#include<bits/stdc++.h>
using namespace std;
const int N = 4e5 + 7;
typedef long long LL;
const int MOD = 1e9 + 7;
LL iv[N], sum[N], a[N];
inline LL read() {
    LL val = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-') f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        val = val * 10 + ch - '0';
        ch = getchar();
    }
    return val * f;
}
inline void prints(LL val) {
    if (val < 0) {
        putchar('-');
        val = -val;
    }
    if (val > 9) prints(val / 10);
    putchar(val % 10 + '0');
}
inline void print(LL val, bool t=true) {
    prints(val);
    if (t) putchar('\n');
    else putchar(' ');
}
void init () {
    iv[1] = 1;
    for (int i = 2; i < N; i++) {
        iv[i] = (MOD - MOD / i) * iv[MOD % i] % MOD;
    }
}
void solve() {
    int n = read();
    LL ret = 0, sub = 0;
    for (int i = 1; i <= n; i++) a[i] = read();
    for (int i = 1; i <= n; i++) sum[i] = (sum[i - 1] + a[i]) % MOD;
    for (int i = 1; i <= n; i++) {
        ret = (ret + (sum[n] * i - sub) % MOD * iv[i] % MOD + MOD) % MOD;
        sub = (sub + sum[i] + sum[n] - sum[n - i] + MOD) % MOD;
    }
    ret = (ret * iv[n] % MOD * iv[n + 1] % MOD * 2) % MOD;
    print(ret);
}
int main() {
    init();
    int T = read();
    while (T--)
        solve();
    return 0;
}
posted @ 2020-08-06 19:30  HighLights  阅读(310)  评论(0)    收藏  举报