Cod sursa(job #3180615)

Utilizator LORDENVraja Luca LORDEN Data 5 decembrie 2023 17:29:40
Problema Sandokan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#define ll long long

using namespace std ;

ifstream cin ("sandokan.in") ;
ofstream cout ("sandokan.out") ;

const ll MOD = 2000003, limit = 5000 ;

ll fact[limit + 2], inv[limit + 2] ;

ll fast_power (ll a, ll b) {

    ll ans = 1 ;

    while (b) {

        if ((b & 1))
            ans = (ans % MOD * a % MOD) % MOD ;

        a = (a % MOD * a % MOD) % MOD ;

        b = (b >> 1) ;

    }

    return ans ;

}

void preload ()
{

    fact[1] = 1 ;
    inv[0] = inv[1] = 1 ;

    for (ll i = 2 ; i <= limit ; i ++)
    {

        fact[i] = i % MOD * fact[i - 1] % MOD ;
        inv[i] = fast_power (fact[i], MOD - 2) ;

    }


}

ll combinatorics (ll n, ll k)
{

    return (fact[n - 1] % MOD * inv[k - 1] % MOD * inv[n - k] % MOD) ;

}

int main()
{

    ll n, k ;

    int x ;

    preload() ;

    cin >> n >> k ;

    ll val = n ;

    while (val - (k - 1) > 0)
        val -= (k - 1) ;

    for (int i = 1 ; i <= n ; i ++)
        cin >> x ;

    cout << combinatorics (n, val) ;

    return 0 ;

}