Pagini recente » Cod sursa (job #1937596) | Cod sursa (job #235658) | Cod sursa (job #1385013) | Cod sursa (job #1482083) | Cod sursa (job #25613)
Cod sursa(job #25613)
#include <stdio.h>
int s,n,m,st[5001],k=1,as,ev; long int nr=0;
void citire()
{FILE *f; int i;
f=fopen("kperm.in","r");
fscanf(f,"%d %d",&n,&m);
fclose(f);
}
void init(int k,int *st)
{st[k]=0;}
int succesor(int k,int *st)
{if(st[k]<n){st[k]++; return 1;}
return 0; }
int valid(int k,int *st)
{int i;
for(i=0;i<k;i++)
if(st[i]==st[k]) return 0;
return 1; }
int solutie(int k)
{return(k==n);}
void tipar(int k,int *st)
{int i,j,b=1;
for(i=1;i<=n-m+1;i++)
{s=0;
for(j=i;j<i+m;j++)
s+=st[j];
if(s%m!=0) {b=0; break;}
}
if(b) nr++;
}
int main()
{FILE *f; int i;
citire();
if(m==n) {nr=1;
for(i=2;i<=n;i++)
nr=nr*i;
f=fopen("kperm.out","w");
fprintf(f,"%ld",nr);
fclose(f);}
else
if(m%2==0) {f=fopen("kperm.out","w");
fprintf(f,"%d",0);
fclose(f);}
else{
init(k,st);
while(k>0)
{do{as=succesor(k,st);
if(as)
ev=valid(k,st);
}while(as&&!ev);
if(as)
if(solutie(k)) tipar(k,st);
else {k++; init(k,st);}
else k--;}
f=fopen("kperm.out","w");
fprintf(f,"%ld",nr);
fclose(f);
}
return 0;
}