很不能理解我为什么会 T,有无老哥帮帮我啊!
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define gc (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
char buf[100000], *p1(buf), *p2(buf);
#define rd read()
inline int read() {
int x = 0, f = 1;
char ch = gc;
while(!isdigit(ch)) {
if(ch == '-') f = 0;
ch = gc;
}
while(isdigit(ch)) {
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = gc;
}
return f ? x : -x;
}
const int N = 4e5 + 1;
const int mod = 1e9 + 7;
int fc[N], fv[N], n, k, s;
inline int ksm(int x, int y) {
int ret = 1;
for(; y; y >>= 1, x = x * x % mod)
if(y & 1) ret = ret * x % mod;
return ret;
}
inline void input() {
n = rd, k = rd;
for(int i = 1; i <= n; i++)
s = (s + rd) % mod;
return ;
}
inline void pref(const int lim) {
fc[0] = 1;
for(int i = 1; i <= lim; i++) fc[i] = fc[i - 1] * i % mod;
fv[lim] = ksm(fc[lim], mod - 2);
for(int i = lim; i >= 1; i--) fv[i - 1] = fv[i] * i % mod;
return ;
}
inline void work() {
pref(k);
int ans = 0;
for(int i = 0; i < k; i++) {
int tem = (i & 1) ? mod - fv[k - i - 1] : fv[k - i - 1];
tem = tem * ksm(k - i, n - 2) % mod * (n + k - i - 1) % mod;
(ans += tem) %= mod;
}
cout << ans * s % mod << '\n';
return ;
}
inline void solve() {
input();
work();
return ;
}
#undef int
#define local freopen("in.txt","r",stdin);freopen("out.txt","w",stdout)
int main() {
#ifdef LOCAL
local;
#endif
solve();
return 0;
}