結果
| 問題 | 
                            No.797 Noelちゃんとピラミッド
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2019-03-19 18:07:12 | 
| 言語 | C++14  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 61 ms / 2,000 ms | 
| コード長 | 1,538 bytes | 
| コンパイル時間 | 1,650 ms | 
| コンパイル使用メモリ | 169,236 KB | 
| 実行使用メモリ | 5,888 KB | 
| 最終ジャッジ日時 | 2024-09-14 02:31:44 | 
| 合計ジャッジ時間 | 6,292 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge6 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 60 | 
ソースコード
#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; i < n; i++)
#define ALL(obj) obj.begin(), obj.end()
const int iINF = 1e9;
const long long llINF = 1e18;
const int MOD = 1e9 + 7;
using namespace std;
const int MAX = 100000;
vector<long long> fac(MAX + 1), inverseFac(MAX + 1);
long long modPow(long long x, long long n) {
    long long ans = 1;
    while (n != 0) {
        if (n & 1) ans = ans * x % MOD;
        x = x * x % MOD;
        n = n >> 1;
    }
    return ans;
}
long long comb(long long a, long long b) {
    if (a == 0 && b == 0) return 1;
    if (a < b || a < 0) return 0;
    long long tmp = inverseFac[a - b] * inverseFac[b] % MOD;
    return tmp * fac[a] % MOD;
}
long long perm(long long a, long long b) {
    if (a < b) return 0;
    long long tmp = inverseFac[a - b] % MOD;
    return tmp * fac[a] % MOD;
}
long long dupc(long long a, long long b) {
    if (a == 0 && b == 0) return 1;
    if (a < 0 || b == 0) return 0;
    long long tmp = inverseFac[a - 1] * inverseFac[b] % MOD;
    return tmp * fac[a + b - 1] % MOD;
}
void init() {
    fac[0] = 1;
    inverseFac[0] = 1;
    for (long long i = 0; i < MAX; i++) {
        fac[i + 1] = fac[i] * (i + 1) % MOD;
        inverseFac[i + 1] = inverseFac[i] * modPow(i + 1, MOD - 2) % MOD;
    }
}
int main() {
    int N;
    cin >> N;
    vector<long long> a(N);
    REP(i, N) {
        cin >> a[i];
    }
    init();
    long long ans = 0;
    REP(i, N) {
        ans += comb(N - 1, i) * a[i];
        ans %= MOD;
    }
    cout << ans << endl;
}