Cod sursa(job #2644455)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 24 august 2020 17:52:55
Problema Sortare Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <bits/stdc++.h>
#define DIMN 5010
using namespace std;
int rmax;
pair <int , int> val[DIMN];
int a[DIMN] , b[DIMN] , c[DIMN] , sol[DIMN];
int nr , v[DIMN];
void solve (int n){
    int i , aux;

    rmax++;

    if (!n)
        return;
    if (n == 1){ /// pui 1 pe pozitia curenta

        sol[v[1]] = ++nr;

        return;
    }

    if (a[n] == b[n] || b[n] == c[n]){ ///pivotii sunt 1 si n

        sol[v[a[n]]] = ++nr;
        //aux = v[c[n]];
        for (i = 1 ; i <= n ; i++){
            if (i > c[n])
                v[i - 2] = v[i];
            else if (i > a[n] && i != c[n])
                v[i - 1] = v[i];
        }
        solve (n - 2);
        sol[aux] = ++nr;

    }
    else { /// un pivot e 1, un pivot e 2, un pivot e n
        sol[v[a[n]]] = ++nr;
        sol[v[b[n]]] = ++nr;

        //aux = v[c[n]];
        for (i = 1 ; i <= n ; i++){
            if (i > b[n])
                v[i - 2] = v[i];
            else if (i > a[n] && i != b[n])
                v[i - 1] = v[i];
        }

        solve (n - 2);
        //sol[aux] = ++nr;
    }



}
int main()
{
    FILE *fin = fopen ("sortare.in","r");
    FILE *fout = fopen ("sortare.out","w");
    int n , i , x , y , z;
    fscanf (fin,"%d",&n);
    for (i = 2 ; i <= n ; i++){
        fscanf (fin,"%d%d%d",&x,&y,&z);
        a[i] = min(x , min(y , z));
        c[i] = max(x , max(y , z));
        b[i] = x + y + z - a[i] - c[i];
    }
    for (i = 1 ; i <= n ; i++)
        v[i] = i;
    solve (n);

    fprintf (fout,"%d\n",rmax);
    for (i = 1 ; i <= n ; i++)
        fprintf (fout,"%d ",sol[i]);
    return 0;
}