Cod sursa(job #1994232)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 24 iunie 2017 13:48:53
Problema Sandokan Scor 100
Compilator cpp Status done
Runda Simulare 16 Marime 0.79 kb
#include <fstream>

using namespace std;

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

typedef long long i64;

const int nmax = 5000;
const int mod = 2000003;

i64 lgput (i64 b, int p) {
    i64 ans = 1;
    while (p > 0) {
        if (p & 1) {
            ans = ans * b % mod;
        }
        b = b * b % mod;
        p >>= 1;
    }
    return ans;
}

int main() {
    int n, k;
    fin >> n >> k;

    int r = n;
    while (r >= k) {
        r -= (k - 1);
    }

    // C(n-1, r-1)

    i64 ans = 1;
    for (int i = n - r + 1; i <= n - 1; ++ i) {
        ans = ans * i % mod;
    }

    i64 inv = 1;
    for (int i = 1; i <= r - 1; ++ i) {
        inv = inv * i % mod;
    }

    fout << ans * lgput(inv, mod - 2) % mod << "\n";

    fin.close();
    fout.close();
    return 0;
}