Cod sursa(job #2079883)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 1 decembrie 2017 22:47:45
Problema Sortare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <bits/stdc++.h>
using namespace std;

void solve() {
    size_t size;
    cin >> size;

    vector< tuple<int, int, int> > instructions(1);
    for (size_t i = 1; i <= size; ++i) {
        int a, b, c;
        cin >> a >> b >> c;
        instructions.push_back(make_tuple(a, b, c));
    }

    vector< int > vec(size + 1);
    auto place_value = [&](int value, int position) {
        int curr_pos = 0;
        while (position) {
            ++curr_pos;
            if (vec[curr_pos] == 0)
                --position;
        }

        vec[curr_pos] = value;
    };

    int current = (int)size, recursion_levels = 1;
    while (current > 1) {
        ++recursion_levels;

        int a, b, c;
        tie(a, b, c) = instructions[current];

        if (a == b || a == c)
            place_value(current, a);
        else if (b == c)
            place_value(current, b);
        else {
            place_value(current, max(a, b));
            place_value(current - 1, min(a, b));
            --current;
        }

        --current;
    }

    if (current == 1)
        place_value(1, 1);

    cout << recursion_levels << endl;
    for (int i = 1; i <= (int)size; ++i)
        cout << vec[i] << ' ';
    cout << endl;
}

int main() {
    assert(freopen("sortare.in", "r", stdin));
    assert(freopen("sortare.out", "w", stdout));
    cin.tie(nullptr);
    ios_base::sync_with_stdio(false);

    solve();

    return 0;
}