Cod sursa(job #282377)

Utilizator alecmanAchim Ioan Alexandru alecman Data 17 martie 2009 16:30:46
Problema Kperm Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<stdio.h>

#define INPUT "kperm.in"
#define OUTPUT "kperm.out"
#define LL long long

const LL MOD = 666013;

FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");

LL N, K, R, C;
LL Sum, P, P2;

int main()
{
  fscanf(fin, "%lld %lld", &N, &K);

  Sum = 1;

  if( K % 2 )
  {
    R = N % K;
    C = N / K;
    P = 1;

    for(LL i = 1; i <= R; ++i)
      P = (P * (i % MOD)) % MOD;

    Sum = (Sum * P) % MOD;
    fprintf(stderr, "%lld\n", Sum);
    P = 1;

    for(LL i = 1; i <= K-R; ++i)
      P = (P * (i % MOD)) % MOD;
    
    Sum = (Sum * P) % MOD;
fprintf(stderr, "%lld\n", Sum);
    P = 1, P2 = 1;

    for(LL i = 1; i <= C+1; ++i)
      P = (P * (i % MOD)) % MOD;
    for(LL i = 1; i <= R; ++i)
      P2 = ((P2 % MOD) * (P % MOD)) % MOD;
    if( !R ) P2 = 1;

    Sum = (Sum * P2) % MOD;
fprintf(stderr, "%lld\n", Sum);
    P = 1, P2 = 1;

    for(LL i = 1; i <= C; ++i)
      P = (P * (i % MOD)) % MOD;
    for(LL i = 1; i <= K-R; ++i)
      P2 = ((P2 % MOD) * (P % MOD)) % MOD;
    if( !(K-R)) P2 = 1;

    Sum = (Sum * P2) % MOD;
fprintf(stderr, "%lld\n", Sum);

    fprintf(fout, "%lld\n", Sum);
  }
  else
    fprintf(fout, "0\n");

  fclose(fin);
  fclose(fout);

  return 0;
}