Cod sursa(job #1744967)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 20 august 2016 19:53:43
Problema Sortare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>

using namespace std;

ifstream cin("sortare.in");
ofstream cout("sortare.out");

const int MAXN = 5010;

int a[MAXN], b[MAXN], c[MAXN], answer[MAXN], level = 0;

void Add(int left, int value, int right) {
    for (int i = right - 2; i >= left; i--)
        answer[i + 1] = answer[i];
    answer[left] = value;
}

void Solve(int n) {
    level++;
    if (n < 3) {
        answer[0] = 1;
        if (n == 2) {
            answer[1] = 2;
            level++;
        }
        return;
    }
    if (a[n] == b[n] || b[n] == c[n] || c[n] == a[n]) {
        if (b[n] == c[n])
            a[n] = b[n];
        Solve(n - 1);
        Add(a[n] - 1, n, n);
    }
    else {
        Solve(n - 2);
        if (b[n] > a[n])
            Add(a[n] - 1, n - 1, n - 1);
        else
            Add(a[n] - 2, n - 1, n - 1);
        Add(b[n] - 1, n, n);
    }
}

int main() {
    int n;
    cin >> n;
    for (int i = 2; i <= n; i++)
        cin >> a[i] >> b[i] >> c[i];
    Solve(n);
    cout << level << "\n";
    for (int i = 0; i < n; i++)
        cout << answer[i] << " ";
    return 0;
}