Submission #1284056

#TimeUsernameProblemLanguageResultExecution timeMemory
1284056IcelastAsceticism (JOI18_asceticism)C++20
100 / 100
15 ms3404 KiB
#include <iostream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn = 2*1e5+5, INF = 4e18+9, mod = 1e9+7;
vector<ll> fact, invfact;
ll binpow(ll a, ll b){
    ll res = 1;
    while(b > 0){
        if(b&1){
            res*=a;
            res%=mod;
        }
        a*=a;
        a%=mod;
        b/=2;
    }
    return res;
}
ll modinv(ll x){
    return binpow(x, mod-2);
}
void calcfact(int n){
    fact.resize(n+1, 0);
    invfact.resize(n+1, 0);

    fact[0] = 1;
    for(int i = 1; i <= n; i++){
        fact[i] = fact[i-1]*i;
        fact[i]%=mod;
    }
    invfact[n] = modinv(fact[n]);
    for(int i = n-1; i >= 0; i--){
        invfact[i] = invfact[i+1]*(i+1)%mod;
    }
}
ll nCk(ll n, ll k){
    if(k < 0 || k > n) return 0;
    return fact[n]*(invfact[k]*invfact[n-k]%mod)%mod;
}
ll distributing_apples(ll n, ll m){ // number of people, apple
    return nCk(m+n-1, n-1);
}
void solve(){
    calcfact(2e5);
    int n, k;
    cin >> n >> k;
    k--;
    ll ans = 0;
    for(int i = 0; i <= k; i++){
        ans += (binpow(-1, i) * nCk(n+1, i) + mod) % mod * (binpow(k+1-i, n) + mod) % mod;
    }
    ans %= mod;
    cout << ans;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...