Cod sursa(job #662279)

Utilizator galbenugalbenu dorin galbenu Data 16 ianuarie 2012 13:15:13
Problema Combinari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#include<iostream>
#include<cstring>
#define  lmax 20
using namespace std;
ifstream f("combinari.in",fstream::in);
ofstream g("combinari.out",fstream::out);
typedef short int stiva[lmax];
stiva st;
short int n,k,i,as,ev,m;
void init()
{if(k==1)
	 st[k]=0;
 else
	 st[k]=st[k-1];
}
int succesor()
{if(st[k]<n-m+k)
{ st[k]+=1;
 return 1;
}
 return 0;
}
int valid()
{short int i;
 for(i=1;i<k;i++) 
	  if(st[i]==st[k])
		  return 0;
	return 1;
}
int solutie()
{return (k==m);}
void tipar()
{short int i;
 for(i=1;i<=m;i++)
	 g<<st[i]<<" ";
g<<"\n";
}
void bt()
{k=1;init();
 while(k)
 {as=1;ev=0;
  while(as && !ev)
  {as=succesor(); 
   if(as)
	    ev=valid();
  }
  if(as)
	   if(solutie())
		    tipar();
	   else
		   ++k,init();
	   else
		   k--;
 }
}
int main()
{f>>n>>m;
 bt();
 f.close();
 g.close();
 return 0;
}