Cod sursa(job #3280410)

Utilizator andrei0simionAndrei Simion andrei0simion Data 26 februarie 2025 13:54:39
Problema Sandokan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <fstream>

using namespace std;

int mod = 2000003;

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

long long Pow(long long baza, long long exp)
{
    long long rez = 1;
    while(exp > 0)
    {
        if(exp % 2 == 0)
        {
            baza *= baza;
            baza %= mod;
            exp /= 2;
        }
        else
        {
            rez *= baza;
            rez %= mod;
            exp--;
        }
    }
    
    return rez;
}

long long Combinatie(long long n, long long k)
{
    long long nFactorial = 1;
    for(int i = 1; i <= n; i++)
        nFactorial = (nFactorial * i) % mod;
    long long kFactorial = 1;
    for(int i = 1; i <= k; i++)
        kFactorial = (kFactorial * i) % mod;
    long long nkFactorial = 1;
    for(int i = 1; i <= n-k; i++)
        nkFactorial = (nkFactorial * i) % mod;
    
    long long rez = (nFactorial * Pow(kFactorial, mod - 2) % mod) * Pow(nkFactorial, mod - 2) % mod;
    return rez;
}

int main()
{
    int nrEle;
    in >> nrEle;
    
    int nrEleOperatie;
    in >> nrEleOperatie;
    
    int lungimeFinala = nrEle % (nrEleOperatie - 1);
    if(lungimeFinala == 0)
        lungimeFinala = nrEleOperatie - 1;
    
    long long rez = Combinatie(nrEle - 1, lungimeFinala - 1);
    out << rez << '\n';

    return 0;
}