Cod sursa(job #30974)

Utilizator andreicanteaCantea Andrei andreicantea Data 15 martie 2007 13:08:31
Problema Pavare2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<fstream.h>
int sol[105],st[105],n,m0,m1;
unsigned long curent,poz,nr_tot;
ifstream f("pavare2.in");
ofstream g("pavare2.out");
void citire()
{
f>>n>>m0>>m1>>poz;
}
void afisare()
{
g<<nr_tot<<endl;
for(int i=1;i<=n;i++)
     g<<sol[i];
}
int valid(int k)
{
int i,nr=0;
if(st[k]==0)
 {
  for(i=1;i<=m0+1&&i<=k;i++)
       if(st[k-i+1]==0)
	   nr++;

 if(nr>m0)
    return 0;
 }
else
  {
    for(i=1;i<=m1+1&&i<=k;i++)
       if(st[k-i+1]==1)
	   nr++;
    if(nr>m1)
	return 0;

  }
return 1;
}
void verif()
{
nr_tot++;
curent++;
if(curent==poz)
  for(int i=1;i<=n;i++)
      sol[i]=st[i];
}
void bkt(int k)
{
if(k==n+1)
   verif();
else
    for(int i=0;i<=1;i++)
     {
      st[k]=i;
      if(valid(k)==1)
	  bkt(k+1);
     }

}
int main()
{
citire();
bkt(1);
afisare();
f.close();
g.close();
return 0;
}