Cod sursa(job #957784)

Utilizator cousin.batmanVaru Batman cousin.batman Data 5 iunie 2013 23:16:50
Problema Combinari Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
using namespace std;

int main(){
    int n, m,  k, i; 

    freopen("combinari.in", "rt", stdin);
    /*freopen("combinari.out", "wt", stdout);*/

    scanf("%d %d", &n, &k);

    bool v[n];
    int s[n];
    for(i=0; i<n; i++)
        v[i]=false, s[i]=0;

    m=0;
    while(m>=0){
        //if solution
        if(m==k){
            for(i=0; i<k; i++)
                printf("%d ", s[i]+1);
            printf("\n");
        }
        
        //try to advance
        if(m<k){
            for(i=(m==0?0:s[m-1]+1); i<n && v[i]; ++i);
            if(i<n){
                v[i]=true;
                s[m]=i;
                m++;
                continue;
            }
        }

        //go back
        while(--m>=0){
           v[s[m]]=false;
           for(i=s[m]+1; i<n && v[i]; ++i);
           if(i<n){
               v[i] = true;
               s[m]=i;
               m++;
               break;
           }
        }
    }

    fclose(stdin);
    fclose(stdout);
    return 0;
}