Cod sursa(job #9455)

Utilizator chiforbogdanchiforbogdan chiforbogdan Data 27 ianuarie 2007 15:36:35
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Unirea 2007, clasele 11-12 Marime 1 kb
#include <stdio.h>
int v[100],i,j,s[100],n,r=0,p=0,d,q,l,x,y,m=0;

void init(int k)
{v[k]=-1;
}
int valid(int k)
{int d=1,j,q;

for(i=1;i<k&&d;i++)
if(v[i]==1)
{q=1;
for(j=i+1;j<=k&&q;j++)
if(v[j]==1)
q=0;
if(q==0)
{j--;
if(s[j]==s[i])
return 0;
}

}


return 1;
}

int succesor(int k)
{if(v[k]<1)
{v[k]++;
return 1;

}
return 0;

 }

int solutie(int k)
{
return k==n;}
void tipar(int k)
{int d=1,t=0,r;

for(i=1;i<=n;i++)
if(v[i]==1)
t++;
if(t>=x&&t<=y)
{for(i=1;i<n&&d;i++)
if(v[i]==1)
{q=1;
for(j=i+1;j<=n&&q;j++)
if(v[j]==1)
q=0;
if(q==0)
{j--;
if(j!=(i+1))
d=0;
}

}



if(d==1)
{m++;
}
}
}

void bt(int k)
{init(k);
while(succesor(k))
if(valid(k))
if(solutie(k))
tipar(k);
else
bt(k+1);

}
















int main()
{FILE*fi,*fo;
fi=fopen("secv.in","r");
fo=fopen("secv.out","w");
fscanf(fi,"%d",&n);
fscanf(fi,"%d",&x);
fscanf(fi,"%d",&y);
for(i=1;i<=n;i++)
fscanf(fi,"%d",&s[i]);


bt(1);

fprintf(fo,"%d",m);
}