Cod sursa(job #7176)

Utilizator alex_aurelia_31Neamtu Alexandra alex_aurelia_31 Data 21 ianuarie 2007 12:57:36
Problema 1-sir Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasele 11-12 Marime 0.94 kb
#include<stdio.h>
#include<math.h>
FILE *f,*g;
int n,as,ev,p,st[200];
unsigned long int nr;
long int s;
void init(int k)
{
st[k]=-1;
}
int succesor(int k)
{
if(st[k]<n && k<=n)
{
st[k]++;
return 1;
}
else
return 0;
}
int validare(int k)
{
int i,suma=0;
if(st[1]!=0)
return 0;
else
{
for(i=1;i<k;i++)
if(abs(st[i+1]-st[i])!=1)
return 0;
for(i=1;i<=k;i++)
suma+=st[i];
if(suma>s)
return 0;
return 1;
}
}
int solutie(int k)
{
if(k==n)
{
int i,suma=0;
for(i=1;i<=k;i++)
suma+=st[i];
if(suma==s)
return 1;
else
return 0;
}
else
return 0;
}

void back(int k)
{
k=1;
init(k);
while(k>0)
{
do
{
as=succesor(k);
if(as)
ev=validare(k);
}
while((as==1)&&(ev==0));
if(as)
{
if(solutie(k))
nr++;
else
{
k++;
init(k);
}
}
else
k--;
}
}


int main()
{
f=fopen("1-sir.in","r");
g=fopen("1-sir.out","w");
fscanf(f,"%d %ld",&n,&s);
back(1);
fprintf(g,"%ld",nr);
fcloseall();
return 0;
}