Cod sursa(job #25436)

Utilizator adyshorcont de teste adyshor Data 4 martie 2007 12:36:31
Problema Kperm Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasele 11-12 Marime 1.32 kb
#include<stdio.h>
#define MOD 666013
long n , i , j,k;
long stiva[5001];


long sol;



void tipar()
{
     /*
     for (int i =1 ; i <= n ; i++)
         printf("%ld ",stiva[i]);
     printf("\n");*/
     sol++;
     if (sol>=MOD)
        sol -= MOD;
}

int valid (int poz, int val)
{
    
    for (i = poz-1 ; i >= 1 ; i--)
        if (stiva[i] == val)
           return 0;
    if (poz < k)
       return 1;
       
    long s = 0;
    for (i = poz ; i >=poz-k;i--)
        s += stiva[i];
    if (s%k==0)
       return 1;
}
    

void back(int k)
{
     
     for (int i = 1 ; i <= n ; i++)
     {
         if (valid(k,i))
         {
                       stiva[k] = i;
                       if (k==n)
                          tipar();
                       else
                       back(k+1);
         }
     }
}



int main()
{
    freopen("kperm.in","r",stdin);
    freopen("kperm.out","w",stdout);
    
    scanf("%ld%ld",&n,&k);
    if (n==k || k == 1)
    {
             long p =1;
             for (i = 1 ; i <=n ; i++)
             {
                 p*=i;
                 if (p>=MOD)
                    p-= MOD;
             }
             sol = p;
             sol%=MOD;
    }
    else
    {    
    back(1);}
    printf("%ld",sol);
    
    return 0;
}