Cod sursa(job #25569)

Utilizator moga_florianFlorian MOGA moga_florian Data 4 martie 2007 12:58:48
Problema Kperm Scor 10
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasele 11-12 Marime 0.74 kb
using namespace std;
#include<stdio.h>
#include<fstream>

int n,k,x[5005],act,sol=0;
char viz[5005];

void go(int i)
{
int j;
for(j=1;j<=n;j++)
 if(i<k || (i>=k&&(j+act)%k==0) )
  if(viz[j]==0)
     {
     x[i]=j;
     viz[j]=1;
     if(i==n)
       {
       sol++;          
       viz[j]=0;
       }
     else
      {
      act+=j;
      if(i-k+1>0)
        act-=x[i-k+1];
      go(i+1);
      act-=j;
      if(i-k+1>0)
        act+=x[i-k+1];
      viz[j]=0;
      }
     }     
}

int main()
{
FILE *fin=fopen("kperm.in","r"),
     *fout=fopen("kperm.out","w");

fscanf(fin,"%d%d",&n,&k);
memset(viz,0,sizeof viz);
act=0;
go(1);
     
fprintf(fout,"%d\n",sol);
fclose(fin);
fclose(fout);
return 0;
}