結果
問題 | No.1489 Repeat Cumulative Sum |
ユーザー |
![]() |
提出日時 | 2021-04-23 22:53:22 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,890 bytes |
コンパイル時間 | 2,900 ms |
コンパイル使用メモリ | 194,188 KB |
最終ジャッジ日時 | 2025-01-21 00:18:42 |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 24 WA * 3 |
ソースコード
#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef vector<int> VI;typedef vector<VI> VVI;typedef vector<long long> VL;typedef vector<vector<long long>> VVL;typedef pair<int,int> Pair;typedef tuple<int,int,int> tpl;#define ALL(a) (a).begin(),(a).end()#define SORT(c) sort((c).begin(),(c).end())#define REVERSE(c) reverse((c).begin(),(c).end())#define EXIST(m,v) (m).find((v)) != (m).end()#define LB(a,x) lower_bound((a).begin(), (a).end(), x) - (a).begin()#define UB(a,x) upper_bound((a).begin(), (a).end(), x) - (a).begin()#define FOR(i,a,b) for(int i=(a);i<(b);++i)#define REP(i,n) FOR(i,0,n)#define RFOR(i,a,b) for(int i=(a)-1;i>=(b);--i)#define RREP(i,n) RFOR(i,n,0)#define en "\n"constexpr double EPS = 1e-9;constexpr double PI = 3.1415926535897932;constexpr int INF = 2147483647;constexpr long long LINF = 1LL<<60;constexpr long long MOD = 1000000007; // 998244353;template<class T> inline bool chmax(T& a, T b){if(a<b){a=b;return true;}return false;}template<class T> inline bool chmin(T& a, T b){if(a>b){a=b;return true;}return false;}struct modint {long long x;modint(long long x=0):x((x%MOD+MOD)%MOD){}long long val(){return x;}modint operator-() const { return modint(-x);}modint& operator+=(const modint a) {if ((x += a.x) >= MOD) x -= MOD;return *this;}modint& operator-=(const modint a) {if ((x += MOD-a.x) >= MOD) x -= MOD;return *this;}modint& operator*=(const modint a) {(x *= a.x) %= MOD;return *this;}modint operator+(const modint a) const {modint res(*this);return res+=a;}modint operator-(const modint a) const {modint res(*this);return res-=a;}modint operator*(const modint a) const {modint res(*this);return res*=a;}modint pow(long long t) const {if (!t) return 1;modint a = pow(t>>1);a *= a;if (t&1) a *= *this;return a;}// must be gcd(x,MOD)==1modint inv() const {// a^{-1} = 1/a MOD p (拡張Euclidの互除法)long long b = MOD, u = 1, v = 0, z = x;while(b){long long t = z / b;z -= t * b; swap(z, b);u -= t * v; swap(u, v);}u %= MOD;if (u < 0) u += MOD;return modint(u);}//modint inv() const {// return pow(MOD-2);//}modint& operator/=(const modint a) {return (*this) *= a.inv();}modint operator/(const modint a) const {modint res(*this);return res/=a;}};using mint = modint;struct Factorial{vector<mint> fact, ifact;Factorial(int N): fact(N+1), ifact(N+1) {assert(N < MOD);fact[0] = 1;for(int i=0; i<N; i++) fact[i+1] = fact[i] * (i+1);ifact[N] = fact[N].inv();for(int i=N; i>0; i--) ifact[i-1] = ifact[i] * i;}mint C(int n, int k){if (k < 0 || k > n) return 0;return fact[n]*ifact[k]*ifact[n-k];}mint P(int n, int k){if (k < 0 || k > n) return 0;return fact[n]*ifact[n-k];}mint inv(int n){assert(n>0);return fact[n-1]*ifact[n];}};mint f(ll n, ll r, mint nCr){mint ret = nCr;ret *= (n+1-r)%MOD;ret /= n+1;return ret;}mint g(ll n, ll r){mint bunbo(1),bunsi(1);ll mn = min(r,n-r);REP(i,mn){bunbo *= i+1;bunsi *= n-i;}return bunsi/bunbo;}void Main(){ll N,M; cin >> N >> M;mint nCr=g(N+M-1,M-1),ans;REP(i,N-1){ll a; cin >> a;nCr = f(N+M-2-i,M-1,nCr);ans += (nCr-1)*a + a;}cout << ans.x << en;return;}int main(void){cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(0);cout<<fixed<<setprecision(15);int t=1; //cin>>t;while(t--) Main();return 0;}