Cod sursa(job #624002)

Utilizator SpiderManSimoiu Robert SpiderMan Data 21 octombrie 2011 14:08:16
Problema Combinari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
# include <cstdio>
# include <cmath>
using namespace std;

const char *FIN = "combinari.in", *FOU = "combinari.out";
const int MAX = 105;

int N, K, P, st[MAX];
bool as, ev;

void init (int K, int *st) {
    st[K] = K - 1;
}

void succesor (bool &as, int *st, int K) {
    if (st[K] < N) {
        ++st[K], as = 1;
    } else {
        as = 0;
    }
}

void valid (bool &ev, int *st, int K) {
    ev = (K == 1 || st[K - 1] < st[K]);
}

int sol (int K) {
    return K == P;
}

void tipar (int *st) {
    for (int i = 1; i <= P; ++i)
        printf ("%d ", st[i]);
    printf ("\n");
}

int main (void) {
    fscanf (fopen (FIN, "r"), "%d %d", &N, &P);

    freopen (FOU, "w", stdout);
    for (init (K = 1, st); K; ) {
        do {
            succesor (as, st, K);
            if (as) valid (ev, st, K);
        } while (as && (!as || !ev));
        if (as) {
            if (sol (K)) tipar (st);
            else init (++K, st);
        } else --K;
    }
}