Cod sursa(job #1676851)

Utilizator pusi23Faier Andreea pusi23 Data 6 aprilie 2016 10:41:19
Problema Combinari Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,p,k,st[19];
ifstream f("combinari.in");
ofstream g("combinari.out");
void init()
{st[k]=0;}

int am_succesor()
{if(st[k]<n-p+k) {st[k]++;
	      return 1;
	      }
 return 0;
}

int e_valid()
{int i;
if(k>1) if(st[k]<st[k-1]) return 0;
 for (i=1;i<=k-1;i++)
   if(st[k]==st[i]) return 0;
 return 1;
}

int sol()
{return k==p;}

void tipar()
{ int i;
for(i=1;i<=p;i++)
  g<<st[i]<<" ";
g<<endl;
}

void back()
{int as,ev;
 k=1;
 init();
 while(k>0)
 { do
   {
    as=am_succesor();
    ev=e_valid();
   }
   while ((as) && (!ev));
   if(as) if (sol()) tipar();
		else {
		       k++;
		       init();
		     }
     else k--;
 }
}

int main ()
{
f>>n;
f>>p;
back();
f.close();
g.close();
return 0;
}