萌新 TLE 求助!
查看原帖
萌新 TLE 求助!
366935
KAMIYA_KINA楼主2021/9/16 09:47

很不能理解我为什么会 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;
}
2021/9/16 09:47
加载中...