Submission #1237547

#TimeUsernameProblemLanguageResultExecution timeMemory
1237547zadniprovskaMagneti (COCI21_magneti)C++20
0 / 110
2 ms580 KiB
#include <bits/stdc++.h>

using namespace std;


#define ll long long

const ll mod = 1e9 + 7;
const ll DIM = 2e5 + 7;

ll a[DIM], fact[DIM], rfact[DIM];

ll C(ll n, ll k) {
    return (((fact[n] * rfact[k]) % mod) * rfact[n-k]) % mod;
}

ll binpow (ll a, ll p) {

    ll ans = 1;
    while (p) {
        if (p & 1) {
            ans *= a;
            ans %= mod;
        }

        a *= a;
        a %= mod;

        p >>= 1;
    }

    return ans;
}

int main(){
    ios::sync_with_stdio(false);cin.tie(nullptr); cout.tie(nullptr);
    
    ll n, L;
    cin >> n >> L;

    ll r;
    for (int i=1; i<=n; i++) {
        cin >> r;
    }

    if (n == 1) {
        cout << L << endl;
        return 0;
    }

    fact[0] = 1;
    for (int i=1; i<=2*L; i++) {
        fact[i] = fact[i-1] * i;
        fact[i] %= mod;
    }

    rfact[0] = 1;
    for (int i=1; i<=2*L; i++) {
        rfact[i] = binpow(fact[i], mod-2);
    }

    if (L - (n-1)*r - 1 + n < 0) cout << 0 << endl;
    else cout << (C(L - (n-1)*r - 1 + n, n) * fact[n]) % mod << endl;

}
;
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...