Cod sursa(job #25408)

Utilizator cos_minBondane Cosmin cos_min Data 4 martie 2007 12:30:08
Problema Kperm Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasele 11-12 Marime 1.29 kb
#include <stdio.h>
#include <fstream>
using namespace std;

#define in "kperm.in"
#define out "kperm.out"
#define dim 5001

int x[dim];
int v, n;
int contor=0, sum;

void ReadData();
void Back(int);
int Ok(int);
void Write();

int main()
{
    ReadData();
    Write();
    
    return 0;
}

void ReadData()
{
     freopen(in,"r",stdin);
     freopen(out,"w",stdout);
     
     scanf("%d%d",&n,&v);
     
     x[0] = 0;
}

void Back(int k)
{
     for ( int i = 1; i <= n; i++ )
     {
         x[k] = i;
         
         if ( Ok(k) )
         {
              if ( k == n ) 
              {
                   contor+=1;
                   if ( contor == 666013 ) contor=0;
              }
              else  if ( k < n ) Back(k+1);
         }
     }
}

int Ok(int k)
{
    sum=0;
    
    for ( int i = 1; i < k; i++ )
         if ( x[i] == x[k] ) return 0;
    
    if ( k <= v )
    {
         sum += x[k];
    }
    
    if ( k == v ) 
    {
         if ( sum % v != 0 ) return 0;
    }   
    
    if ( k > v )
    {
         sum += x[k];
         sum -= x[k-v];
         
         if ( sum % v != 0 ) return 0;
    }
    return 1;
}

void Write()
{
     Back(1);
     if ( contor == 666013 ) contor=0;
     printf("%d", contor);
}