Cod sursa(job #2331161)

Utilizator bogdi1bogdan bancuta bogdi1 Data 29 ianuarie 2019 11:28:08
Problema Kperm Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int f[5005];
const int mod = 666013;
int main()
{   freopen("kperm.in", "r",stdin);
    freopen("kperm.out", "w",stdout);
    int n,k,i,nr,nr1,maxx,maxx1=0,fact,ans=1,factmaxx,factmaxx1;
    scanf("%d%d", &n, &k);
    if(k%2==0){
        printf("0");
        return 0;
    }
    for(i=1; i<=n; i++)
        f[i%k]++;
    nr=0;
    nr1=0;
    if(n%k==0)
    {
    maxx=f[1];
    maxx1=f[0];
    for(i=0; i<k; i++)
        if(f[i]==maxx)
            nr++;
        else
            nr1++;
    fact=1;
    factmaxx=1;
    for(i=1; i<=maxx; i++)
        factmaxx=(factmaxx*1LL*i)%mod;
    for(i=1; i<=nr; i++){
        ans=(ans*1LL*factmaxx)%mod;
        fact=(fact*1LL*i)%mod;
    }
    ans=(ans*1LL*fact)%mod;
    printf("%d",ans);
    }
    else
    {
    maxx=f[1];
    maxx1=f[0];
    for(i=0; i<k; i++)
        if(f[i]==maxx)
            nr++;
        else
            nr1++;
    fact=1;
    factmaxx=1;
    for(i=1; i<=maxx; i++)
        factmaxx=(factmaxx*1LL*i)%mod;
    for(i=1; i<=nr; i++){
        ans=(ans*1LL*factmaxx)%mod;
        fact=(fact*1LL*i)%mod;
    }
    ans=(ans*1LL*fact)%mod;
    fact=1;
    factmaxx1=1;
    for(i=1; i<=maxx1; i++)
        factmaxx1=(factmaxx1*1LL*i)%mod;
    for(i=1; i<=nr1; i++){
        ans=(ans*1LL*factmaxx1)%mod;
        fact=(fact*1LL*i)%mod;
    }
    ans=(ans*1LL*fact)%mod;
    printf("%d", ans);
    }
    return 0;
}