Cod sursa(job #3151992)

Utilizator ungureanubogdan07Ungureanu Bogdan ungureanubogdan07 Data 23 septembrie 2023 14:07:01
Problema Sandokan Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#define MOD 200003
#define int long long

using namespace std;

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

int fact[5001];

void euclid(int a, int b, int & x, int & y)
{
    if(b == 0) {x = 1, y = 1; return;}
    int X, Y;
    euclid(b, a % b, X, Y);
    x = Y;
    y = X - a / b * Y;
}

int impartire(int a, int b)
{
    int invers, aux;
    euclid(b, MOD, invers, aux);
    while(invers < 0) invers += MOD;
    return 1ll * a * invers % MOD;
}

int combinari(int n, int k)
{
    return impartire(impartire(fact[n], fact[k]), fact[n - k]);
}

signed main()
{
    fact[0] = fact[1] = 1;
    for(int i = 2; i <= 5000; ++i) fact[i] = (1ll * i * fact[i - 1]) % MOD; 
    int n, k; cin >> n >> k;
    for(int i = 1; i <= n; ++i) {
        int x; cin >> x;
    }
    int rez = 1;
    while(n >= k) {
        rez *= combinari(n, k);
        n -= k - 1;
    }
    cout << rez;
    return 0;
}