Cod sursa(job #3249216)

Utilizator irina_opreaIrina Oprea irina_oprea Data 15 octombrie 2024 15:37:33
Problema Sandokan Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>

using namespace std;

long long mod = 9901;

long long combinatorica(long long n, long long k);
long long inv_mod(long long a, long long n);

int main()
{
    long long n, k, a, ans=1;
    cin >> n >> k;
    for (int i=0; i<n; i++)
    {
        cin >> a;
    }
    ans = combinatorica(n, k);
    ans %= mod;
    cout << ans << '\n';
    return 0;
}

long long combinatorica (long long n, long long k)
{
    long long nfact=1, kfact=1, nkfact=1, ans=1;
    for (int i=2; i<=n; i++)
    {
        nfact *= i;
        nfact %= mod;
    }
    for (int i=2; i<=k; i++)
    {
        kfact *= i;
        kfact %= mod;
    }
    for (int i=2; i<=n-k; i++)
    {
        nkfact *= i;
        nkfact %= mod;
    }
    kfact = inv_mod(kfact, mod-2);
    nkfact = inv_mod(nkfact, mod-2);
    ans *= kfact * nfact; ans %= mod; ans *= nkfact; ans %= mod;
    return ans;
}

long long inv_mod (long long a, long long n)
{
    int rez=1;
    while (n)
    {
        if (n % 2 == 1)
        {
            rez *= a;
            rez %= mod;
        }
        a *= a; a %= mod;
        n /= 2;
    }
    return rez;
}