Cod sursa(job #2644465)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 24 august 2020 18:07:02
Problema Sortare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.06 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;

    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


        if (a[n] == b[n])
            sol[v[a[n]]] = ++nr;
        else sol[v[c[n]]] = ++nr;

        if (a[n] == b[n] && b[n] == c[n]){

            for (i = 1 ; i <= n ; i++){
                if (i > c[n])
                    v[i - 1] = v[i];
            }

            solve (n - 1);

        }
        else {
            if (a[n] == b[n]){
                for (i = 1 ; i <= n ; i++){
                    if (i > a[n])
                        v[i - 1] = v[i];
                }
            }
            else {
                for (i = 1 ; i <= n ; i++){
                    if (i > c[n])
                        v[i - 1] = v[i];
                }
            }
            solve (n - 1);
        }

    }
    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;
}