Cod sursa(job #2217019)

Utilizator PetyAlexandru Peticaru Pety Data 28 iunie 2018 17:22:03
Problema Pascal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>

using namespace std;

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

const int mod = 20173333;
int p, n, k, fact[100005], dp[100005];

int logpow(int a, int b) {
  int ans = 1, d = a;
  while (b) {
    if (b & 1)
      ans = 1LL * ans * d % mod;
      b >>= 1;
      d = 1LL * d * d % mod;
  }
  return ans;
}

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

int main()
{
  fin >> p >> n >> k;
  if (p == 1) {
    fact[0] = 1;
    for (int i = 1; i <= n; i++)
      fact[i] = 1LL * fact[i - 1] * i % mod;
    fout << comb(n - 1, k - 1);
  }
  else {
    dp[0] = dp[1] =1;
    for (int i = 2; i <= n; i++) {
      dp[i] = dp[i - 1] * 2 % mod;
      if (i >= k + 1)
        dp[i] = (dp[i] - dp[i - (k + 1)] + mod) % mod;
    }
    fout << dp[n];
  }
  return 0;
}