結果
問題 | No.1081 和の和 |
ユーザー | kanra824 |
提出日時 | 2020-06-19 21:23:27 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,489 bytes |
コンパイル時間 | 1,519 ms |
コンパイル使用メモリ | 171,476 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-03 13:38:12 |
合計ジャッジ時間 | 2,024 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 8 |
ソースコード
#include <bits/stdc++.h> template <long long mod> class Combination { std::vector<long long> fact, finv, inv; public: Combination() {} Combination(int sz) { fact.resize(sz); finv.resize(sz); inv.resize(sz); fact[0] = 1; for (int i = 1; i < sz; ++i) { fact[i] = fact[i - 1] * i % mod; } inv[0] = 0; inv[1] = 1; for (int i = 2; i < sz; ++i) { inv[i] = mod - inv[mod % i] * (mod / i) % mod; } finv[0] = 1; for (int i = 1; i < sz; ++i) { finv[i] = finv[i - 1] * inv[i] % mod; } } long long C(long long n, long long k) { if (n < k) return 0; if (n < 0 || k < 0) return 0; return (fact[n] * finv[k] % mod) * finv[n - k] % mod; } long long P(long long n, long long k) { if (n < k) return 0; if (n < 0 || k < 0) return 0; return fact[n] * finv[n - k] % mod; } long long H(long long n, long long k) { return this->C(n + k - 1, k); } long long getfact(int i) { return fact[i]; } long long getinv(int i) { return inv[i]; } long long getfinv(int i) { return finv[i]; } }; using namespace std; using ll = long long; using vi = vector<int>; using vvi = vector<vi>; using vll = vector<ll>; using vvll = vector<vll>; using P = pair<int, int>; const double eps = 1e-8; const ll MOD = 1000000007; const int INF = INT_MAX / 2; const ll LINF = LLONG_MAX / 2; template <typename T1, typename T2> bool chmax(T1 &a, const T2 &b) { if(a < b) {a = b; return true;} return false; } template <typename T1, typename T2> bool chmin(T1 &a, const T2 &b) { if(a > b) {a = b; return true;} return false; } template<typename T1, typename T2> ostream& operator<<(ostream &os, const pair<T1, T2> p) { os << p.first << ":" << p.second; return os; } template<class T> ostream &operator<<(ostream &os, const vector<T> &v) { for(int i=0;i<((int)(v.size()));++i) { if(i) os << " "; os << v[i]; } return os; } int main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(10); int n; cin >> n; vll a(n); for(int i=0;i<(n);++i) cin >> a[i]; Combination<MOD> comb(1000); ll su = 0; for(int i=0;i<(n);++i) { su += a[i] * comb.C(n-1, i); su %= MOD; } cout << su << endl; }