Cod sursa(job #2003581)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 23 iulie 2017 12:39:57
Problema Kperm Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <bits/stdc++.h>
#define MOD 666013
#define MAXN 5000

int fact[MAXN + 1];
int fr[MAXN + 1];

inline int check(int n, int k, int i) {
    if(i == 0)
        return n / k;
    return (n - i) / k + 1;
}

int main() {
    FILE *fi, *fout;
    int i, n, k;
    fi = fopen("kperm.in" ,"r");
    fout = fopen("kperm.out" ,"w");
    fscanf(fi,"%d %d " ,&n,&k);
    fact[0] = 1;
    for(i = 1; i <= n; i++)
        fact[i] = (1LL * fact[i - 1] * i) % MOD;
    int ans = 1;
    for(i = 0; i < k; i++) {
        ans = (1LL * ans * fact[check(n, k, i)]) % MOD;
        fr[check(n, k, i)]++;
    }
    for(i = 0; i <= n; i++)
        ans = (1LL * ans * fact[fr[i]]) % MOD;
    if(((k * (k - 1)) / 2) % k > 0)
        ans = 0;
    fprintf(fout,"%d" ,ans);
    fclose(fi);
    fclose(fout);
    return 0;
}