Pagini recente » Cod sursa (job #1511762) | Cod sursa (job #751702) | Cod sursa (job #183128) | Cod sursa (job #2757668) | Cod sursa (job #25599)
Cod sursa(job #25599)
#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;
}