結果
問題 | No.1489 Repeat Cumulative Sum |
ユーザー |
![]() |
提出日時 | 2021-04-23 22:54:25 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 6,084 bytes |
コンパイル時間 | 1,620 ms |
コンパイル使用メモリ | 172,880 KB |
実行使用メモリ | 35,228 KB |
最終ジャッジ日時 | 2024-07-04 08:35:56 |
合計ジャッジ時間 | 18,082 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 1 RE * 26 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define int long long#define stoi stollusing pii = pair<int, int>;using vi = vector<int>;using vvi = vector<vi>;using vb = vector<bool>;using vvb = vector<vb>;template <class T>using heap = priority_queue<T, deque<T>, greater<T>>;#define all(c) begin(c), end(c)#define rall(c) rbegin(c), rend(c)#define fore(x, c) for (auto &&x : c)#define rep(i, a, n) for (int i = (int)(a), i##len = (int)(n); i < i##len; ++i)#define rrep(i, a, n) for (int i = (int)(n - 1); i >= a; --i)#define pb push_back#define eb emplace_back#define dump(...)const signed INF_ = 1001001001;const long long INF = 1001001001001001001LL;const int DX[9] = {0, 1, 0, -1, 1, 1, -1, -1, 0},DY[9] = {-1, 0, 1, 0, -1, 1, 1, -1, 0};template <class C>int sz(const C &c) {return (int)c.size();}template <class C, class T>bool contains(const C &c, const T &v) {return c.find(v) != c.end();}template <class T>bool inseg(const T &l, const T &x, const T &r) {return l <= x && x < r;}template <class T, class U>ostream &operator<<(ostream &os, const pair<T, U> &p) {return os << p.first << " " << p.second;}template <class T, class U>istream &operator>>(istream &is, pair<T, U> &p) {return is >> p.first >> p.second;}template <class T, class C>ostream &ostream_container_impl(ostream &os, const C &v) {if (v.empty()) return os;auto itr = begin(v), prv = prev(end(v));while (itr != prv) os << *itr++ << " ";return os << *prv;}template <class T>ostream &operator<<(ostream &os, const vector<T> &v) {return ostream_container_impl<T>(os, v);}template <class T>ostream &operator<<(ostream &os, const deque<T> &v) {return ostream_container_impl<T>(os, v);}template <class T>ostream &operator<<(ostream &os, const set<T> &v) {return ostream_container_impl<T>(os, v);}template <class T>istream &operator>>(istream &is, vector<T> &v) {for (auto &x : v) is >> x;return is;}template <class T, class U>bool chmax(T &a, const U &b) {return a < b ? a = b, 1 : 0;}template <class T, class U>bool chmin(T &a, const U &b) {return a > b ? a = b, 1 : 0;}template <class T>void psum(T &c) {partial_sum(begin(c), end(c), begin(c));}template <class T>void decrement(T &x) {x -= 1;}template <class T, class U>void decrement(pair<T, U> &p) {decrement(p.first);decrement(p.second);}template <class T>void decrement(vector<T> &v) {for (auto &x : v) decrement(x);}template <class T>void increment(T &x) {x += 1;}template <class T, class U>void incrment(pair<T, U> &p) {increment(p.first);increment(p.second);}template <class T>void increment(vector<T> &v) {for (auto &x : v) increment(x);}#if defined(LOCAL)void dump_impl(string s) { assert(s.empty()); }template <class H, class... T>void dump_impl(string s, const H &head, const T &...tail) {int par = 0;rep(i, 0, sz(s)) {char ch = s[i];if (ch == ',' && par == 0) {cerr << " = " << head << ",";dump_impl(s.substr(i + 1), tail...);return;} else {cerr << ch;if (ch == '(') par++;if (ch == ')') par--;}}}#ifdef dump#undef dump#endif#define dump(...) \do { \cerr << "\x1b[33;1m"; \dump_impl(#__VA_ARGS__ ",", __VA_ARGS__); \cerr << "\x1b[0m" << endl; \} while (0)#endifstruct before_main_function {before_main_function() {#if defined(LOCAL) && defined(int)cerr << "\x1b[7m"<< "'int' is 'long long'"<< "\x1b[m" << endl;#endifcin.tie(nullptr);ios::sync_with_stdio(false);cout << setprecision(15) << fixed;}} before_main_function;//------------------8<------------------------------------8<--------------------template <int mod>class ModInt {public:ModInt() : v(0) {}ModInt(int x) : v((x + mod) % mod) {}int value() const { return v; }const ModInt operator+(const ModInt &r) const {return ModInt(this->v + r.v);}const ModInt operator-(const ModInt &r) const {return ModInt(this->v + mod - r.v);}const ModInt operator*(const ModInt &r) const {return ModInt(this->v * r.v);}const ModInt operator/(const ModInt &r) const { return (*this * (~r)); }const ModInt operator^(int k) const { return ModInt(bpow(this->v, k)); }const ModInt operator~() const { return ModInt(bpow(this->v, mod - 2)); }bool operator==(const ModInt &r) const { return this->v == r.v; }bool operator!=(const ModInt &r) const { return this->v != r.v; }ModInt &operator+=(const ModInt &r) { return *this = *this + r; }ModInt &operator-=(const ModInt &r) { return *this = *this - r; }ModInt &operator*=(const ModInt &r) { return *this = *this * r; }ModInt &operator/=(const ModInt &r) { return *this = *this * (~r); }private:int v;int bpow(int a, int b) const {int ret = 1;while (b > 0) {if (b & 1) ret = (ret * a) % mod;a = (a * a) % mod;b >>= 1;}return ret;}};using Mint = ModInt<1000000007>;using Mvi = vector<Mint>;using Mvvi = vector<vector<Mint>>;struct Factorial {static constexpr int MAX_N = 2000006;vector<Mint> fact, fact_inv;Factorial(size_t size = MAX_N) : fact(size), fact_inv(size) {fact[0] = fact_inv[0] = 1;for (int i = 1; i < MAX_N; ++i) {fact[i] = fact[i - 1] * i;fact_inv[i] = ~fact[i];}}Mint combination(int N, int R) {if (N < R) return 0;return fact[N] * fact_inv[N - R] * fact_inv[R];}static Mint bin_pow(Mint x, int p) {if (x.value() == 0) return x;Mint prod = 1;while (p > 0) {if (p & 1) prod *= x;x *= x;p >>= 1;}return prod;}} fact;signed main() {int N, M;cin >> N >> M;vi A(N);rep(i, 1, N) cin >> A[i];M--;Mint ans = 0;Mint S = 0;int t = 0;rrep(i, 1, N) {S += fact.combination(M + t, M - 1);t += 1;ans += (S + 1) * Mint(A[i]);}cout << ans.value() << endl;}