結果
問題 | No.797 Noelちゃんとピラミッド |
ユーザー |
![]() |
提出日時 | 2019-07-19 20:36:12 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 42 ms / 2,000 ms |
コード長 | 1,276 bytes |
コンパイル時間 | 1,365 ms |
コンパイル使用メモリ | 107,048 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-26 00:35:22 |
合計ジャッジ時間 | 4,204 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 60 |
ソースコード
#include <iostream> #include <string> #include <algorithm> #include <vector> #include <stack> #include <queue> #include <list> #include <set> #include <map> #include <numeric> #include <regex> #include <tuple> #include <iomanip> #include <cmath> using namespace std; typedef long long ll; typedef pair<int, int> P; #define MOD 1000000007 // 10^9 + 7 #define INF 1000000000 // 10^9 #define LLINF 1LL<<60 ll com[100009]; // com[k] = (N-1)C(k-1) ll a[100009]; // mod付きpower // x^n ll modpow(ll x, ll n) { if (n == 0) return 1LL; else if (n % 2 == 0) return modpow((x*x) % MOD, n / 2) % MOD; else return (modpow((x*x) % MOD, n / 2) * x) % MOD; } // a/bを返す ll divMod(ll a, ll b) { ll res = a * modpow(b, MOD - 2); return res % MOD; } int main() { cin.tie(0); ios::sync_with_stdio(false); /* ll K, L; cin >> K >> L; cout << divMod(K, L)%MOD << " = " << K / L << endl; */ ll N; cin >> N; for (int i = 1; i <= N; i++) cin >> a[i]; com[1] = 1; com[N] = 1; for (ll i = 1; i <= N - 2; i++) { com[i + 1] = (N - i)*com[i]; com[i + 1] %= MOD; com[i + 1] = divMod(com[i + 1], i); } ll ans = 0; for (int i = 1; i <= N; i++) { ans += a[i] * com[i]; ans %= MOD; //cout << a[i] << " " << com[i] << endl; } cout << ans << endl; return 0; }