Cod sursa(job #3152005)

Utilizator ungureanubogdan07Ungureanu Bogdan ungureanubogdan07 Data 23 septembrie 2023 14:43:46
Problema Sandokan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#define MOD 2000003
#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 ramase = n;
    while(ramase >= k) ramase -= k - 1;
    cout << combinari(n - 1, ramase - 1);
    return 0;
}