Cod sursa(job #2330355)

Utilizator gavra_bogdanBogdan Gavra gavra_bogdan Data 28 ianuarie 2019 11:46:30
Problema Kperm Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <fstream>

using namespace std;
const int mod=666013;
long long fact(int k)
{
    long long p=1;
    for(int i=1; i<=k; i++)
    {
        p=(long long)p*i;
        p=(long long)p%mod;
    }
    return p;
}
long long put(int x,int a)
{
    long long p=1;
    for(int i=1; i<=a; i++)
    {
        p=(long long)p*x;
        p=(long long)p%mod;
    }
    return p;
}
int main()
{
    ifstream cin("kperm.in");
    ofstream cout("kperm.out");
    int k,n;
    cin>>n>>k;
    if(k%2==0)
    {
        cout<<"0";
        return 0;
    }
    if(n>=k*2)
    {
        if(n%k!=0)
        {
            int r=n%k;
            long long sol=1;
            sol=fact(r);
            sol=(long long)sol*(put(fact(n/k+1),r));
            sol=(long long)sol%mod;
            sol=(long long)sol*fact(k-r);
            sol=(long long)sol%mod;
            sol=(long long)sol*(put(fact(n/k),k-r));
            sol=(long long)sol%mod;
            cout<<sol;
        }
        else
        {
            long long sol=1;
            sol=fact(k);
            sol=(long long)sol*(put(fact(n/k),k));
            sol=(long long)sol%mod;
            cout<<sol;
        }
    }
    if(n==k)
        cout<<fact(n);
    if(n>k and n<2*k)
    {
        int r=n%k;
        long long sol=1;
        sol=fact(r);
        sol=(long long)sol*(put(2,r));
        sol=(long long)sol%mod;
        sol=(long long)sol*(fact(k-r));
        sol=(long long)sol%mod;
        cout<<sol;
    }
    return 0;
}