Cod sursa(job #518632)

Utilizator vladiiIonescu Vlad vladii Data 2 ianuarie 2011 12:58:29
Problema Kperm Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <cstdio>
using namespace std;
#define maxn 5010
#define mod 666013
#define LL long long

int N, K;
LL sol = 1;
int fact[maxn];

int main() {
    FILE *f1=fopen("kperm.in", "r"), *f2=fopen("kperm.out", "w");

    fscanf(f1, "%d %d\n", &N, &K);

    fact[0] = 1;
    for(int i=1; i<=N; i++) {
         fact[i] = (fact[i-1] * i) % mod;
    }

    if(N % K) {
         int poz = N % K;
         int ap = N / K + 1;

         for(int i=poz; i>=1; i--) {
              sol = (LL)sol * i; sol %= mod;
              sol = (LL)sol * ap; sol %= mod;
              sol = (LL)sol * fact[ap - 1]; sol %= mod;
         }

         ap --;
         for(int i=K - poz; i>=1; i--) {
              sol = (LL)sol * i; sol %= mod;
              sol = (LL) sol * ap; sol %= mod;
              sol = (LL)sol * fact[ap - 1]; sol %= mod;
         }
    }
    else {
         int ap = N / K;

         for(int i=K; i>=1; i--) {
              sol = (LL)sol * i; sol %= mod;
              sol = (LL) sol * ap; sol %= mod;
              sol = (LL)sol * fact[ap - 1]; sol %= mod;
         }
    }

    fprintf(f2, "%lld\n", sol);
    fclose(f1); fclose(f2);
    return 0;
}