Cod sursa(job #2036404)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 10 octombrie 2017 17:33:22
Problema Sortare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
using namespace std;

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

const int DIM = 5005;

int a[DIM], b[DIM], c[DIM], ans[DIM];

void modify(int le, int ri, int x)
{
    for (int i = ri; i >= le; --i)
        ans[i + 1] = ans[i];
    ans[le] = x;
}

int solve(int n)
{
    int nr = 1;
    if (n == 1) {
        ans[1] = 1;
        return nr;
    }
    
    if (a[n] > b[n]) swap(a[n], b[n]);
    if (a[n] > c[n]) swap(a[n], c[n]);
    if (b[n] > c[n]) swap(b[n], c[n]);
    
    if (a[n] != b[n] and b[n] != c[n]) {
        nr = solve(n - 2) + 1;
        modify(b[n], n - 2, n - 1);
        modify(c[n], n - 1, n);
    }
    else {
        nr = solve(n - 1) + 1;
        modify(b[n], n - 1, n);
    }
    
    return nr;
}

int main(void)
{
    int n;
    in >> n;
    
    for (int i = 2; i <= n; ++i)
        in >> a[i] >> b[i] >> c[i];
    
    out << solve(n) << endl;
    for (int i = 1; i <= n; ++i)
        out << ans[i] << " ";
    
    return 0;
}