Cod sursa(job #1104675)

Utilizator SapientiaCHIRILA ADRIAN Sapientia Data 10 februarie 2014 22:15:36
Problema Submultimi Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
using namespace std;
int st[20],n,k,p;
bool as,ev,stop;
void succ(bool &as)
{
    if (st[k]<n-p+k)
    {
        st[k]=st[k]+1;
        as=true;
    }
    else as=false;
}
void valid(bool &ev)
{
    int i;
    ev=1;
    if (k>1 && st[k]<st[k-1]) ev=false;
    else
    for(i=1;i<=k-1;++i)
     if (st[i]==st[k]) {ev=false;break;}
}
void tipareste()
{
    int i;
    for(i=1;i<=k;++i) printf("%d ",st[i]);printf("\n");
}
int main()
{

  freopen("submultimi.in","r",stdin);
  scanf("%d",&n);
  freopen("submultimi.out","w",stdout);
  for(p=1;p<=n;++p)
  {
    k=1;
    st[1]=0;
    while(k>0)
    {
       stop=false;
       do
       {
         succ(as);
         if (as) valid(ev);
         if (!as || (as && ev)) stop=true;
       }
       while(!stop);
       if (as)
       {
          if (k==p) tipareste();
          else {++k;st[k]=0;}
       }
       else --k;
    }
  }
    return 0;
}