Cod sursa(job #1862002)

Utilizator alexnekiNechifor Alexandru alexneki Data 29 ianuarie 2017 14:30:40
Problema Combinari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>

using namespace std;

struct List {
    int head;
    List *tail;
};

List *emptylist = nullptr;
List *sol;
int n, h;

List* prepend(int val, List* list) {
  return new List{val, list};
}

List* pop(List* list) {
  if(list == emptylist)
    return emptylist;
  else
    return list->tail;
}

void print(List* list) {
  if(list != emptylist) {
    print(list->tail);
    printf("%d ", list->head);
  }
}

void explore(int k, int val) {
  if (k == h) {
    print(sol);
    printf("\n");
  } else { // n-k+h
    for (int i = val + 1; i <= n - h + k + 1; i++) {
      sol = prepend(i, sol);
      explore(k + 1, i);
      sol = pop(sol);
    }
  }
}

int main() {
  freopen("combinari.in", "rt", stdin);
  freopen("combinari.out", "wt", stdout);
  cin >> n >> h;
  for (int i = 1; i <= n - h + 1; i++) {
    sol = new List{i, emptylist};
    explore(1, i);
  }
  return 0;
}