Cod sursa(job #3329503)

Utilizator David_RadavoiRadavoi David Alexandru David_Radavoi Data 13 decembrie 2025 15:51:13
Problema Sandokan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>

using namespace std;

#define MOD 2000003
#define MAXN 5000

int fact[MAXN + 1];

void precalculare(){
    int i;
    fact[0] = 1;
    for (i = 1; i <= MAXN; i++){
        fact[i] = 1LL * fact[i - 1] * i % MOD;
    }
}

int exp(int nr){
    int pow = MOD - 2, rez = 1;
    while (pow > 0){
        if (pow % 2 == 1){
            rez = 1LL * rez * nr % MOD;
        }
        nr = 1LL * nr * nr % MOD;
        pow /= 2;
    }
    return rez;
}

int comb(int N, int K){
    int fctN = fact[N];
    int fctK = exp(fact[K]);
    int fctNK = exp(fact[N - K]);
    return 1LL * fctN * fctK % MOD * fctNK % MOD;
}

int main()
{
    FILE *fin, *fout;
    fin = fopen("sandokan.in", "r");
    fout = fopen("sandokan.out", "w");
    precalculare();
    int N, K, i, rest;
    fscanf(fin, "%d%d", &N, &K);
    ///nu ne intereseaza sirul de numere pentru ca sunt distincte
    ///(adica oricum o sa avem un sir de forma a1 < a2 < a3 < ... < aN
    N--;
    K--;
    for (i = 1; i * K <= N; i++){
    }
    i--;
    K *= i;
    fprintf(fout, "%d", comb(N, K));
    fclose(fin);
    fclose(fout);
    return 0;
}