Cod sursa(job #31037)

Utilizator therain3rVlad Dumitrescu therain3r Data 15 martie 2007 13:27:15
Problema Pavare2 Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream.h>
int n,a,b,k,t=0,sol=0;
int c[110];

void citire()
{
  ifstream f("pavare2.in");
  f>>n>>a>>b>>k;
  f.close();
}

long long int pav(int poz, int c, int nr)
{
  if(nr==0) return 0;
  if(poz==n) return 1;

  if(c==0) return pav(poz+1,c,nr-1)+pav(poz+1,1,b);
  else return pav(poz+1,c,nr-1)+pav(poz+1,0,a);
}

void back(int l, int x, int y)
{
  if(l==n+1)
  {
    sol++;
    if(sol==k) t=1;
  }
  else
  {
    int i;
    for(i=0;i<=1 && !t;i++)
    {
      if(i==0 && !t)
      {
	if(x!=0 && !t)
	{
	  c[l]=0;
	  back(l+1,x-1,b);
	}
	else
	 if(!t)
	  x=a;
      }
      else
       if(!t)
       {
	if(y!=0 && !t)
	{
	  c[l]=1;
	  back(l+1,a,y-1);
	}
       }
    }
  }
}

int main()
{
  citire();
  back(1,a,b);
  ofstream g("pavare2.out");
  g<<pav(1,0,a)+pav(1,1,b)<<"\n";
  int i;
  for(i=1;i<=n;i++)
    g<<c[i];
  g<<"\n";
  g.close();
  return 0;
}