Cod sursa(job #2106090)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 14 ianuarie 2018 22:24:12
Problema Sandokan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>

const int MAXN = 5e3;
const int MOD = 2e6 + 3;

int fact[MAXN + 1];

inline int pow(int a, int n) {
  int p = 1;
  while (n > 0) {
    if (n & 1) {
      p = (1LL * p * a) % MOD;
    }
    a = (1LL * a * a) % MOD;
    n >>= 1;
  }
  return p;
}

inline int comb(int n, int k) {
  return (1LL * fact[n] * (pow((1LL * fact[k] * fact[n - k]) % MOD, MOD - 2) % MOD)) % MOD;
}

int main() {
  int n, k;
  FILE *f = fopen("sandokan.in", "r");
  fscanf(f, "%d%d", &n, &k);
  fclose(f);
  fact[0] = fact[1] = 1;
  for (int i = 2; i <= n; ++i) {
    fact[i] = (1LL * i * fact[i - 1]) % MOD;
  }
  k = n % (k - 1);
  if (k < 1) {
    k = 1;
  }
  f = fopen("sandokan.out", "w");
  fprintf(f, "%d\n", comb(n - 1, k - 1));
  fclose(f);
  return 0;
}