Cod sursa(job #25599)

Utilizator lluckyLuca Vlad llucky Data 4 martie 2007 13:06:41
Problema Kperm Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<stdlib.h>
#define MAXS 5001

int k,n,st[MAXS],nr;

int init (int p) {st[p]=0; return 1;}
int succesor (int p) {if(st[p]<n) {st[p]++; return 1;} return 0;}
int valid(int p)
 {
	int i;
	for(i=1;i<p;i++) if(st[i]==st[p]) return 0;
	return 1;
 }
int solutie (int p)
 {
	if(p<n) return 0;
	int i,j,b,s;
	b=1;
	for(i=1;i<=p-k+1; i++)
		{
		 s=0;
		 for(j=i;j<i+k;j++)
			 s+=st[j];
		 if(s%k!=0) {b=0; break;}
		}
	return b;
 }
int tipar()
{nr++; return 1;}

int main(void)
{
FILE *f;
f=fopen("kperm.in","r");
fscanf(f,"%d %d",&n,&k);
fclose(f);
if(k%2==0)
 {
	f=fopen("kperm.out","w");
	fprintf(f,"0\n");
	fclose(f);
	exit(0);
 }
int p,as,ev;
p=1;
init(p);
while(p>0)
 {
	do
	 {
		as=succesor(p);
		if(as) ev=valid(p);
	 }while(as&&!ev);
	if(as)
	 {
		if(solutie(p)) tipar();
		else if(p>n) p--;
				 else {
							 p++;
							 init(p);
							}
	 }
	else p--;

 }
f=fopen("kperm.out","w");
fprintf(f,"%d\n",nr%666013);
fclose(f);
return 0;
}