Cod sursa(job #2011816)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 17 august 2017 12:18:09
Problema Sortare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<cstdio>
#include<algorithm>

#define maxn 5005

using namespace std;

FILE*f=fopen("sortare.in","r");
FILE*g=fopen("sortare.out","w");

int n;
int A[maxn],B[maxn],C[maxn],sol[maxn],v[2][maxn],x[5];

int main () {

    fscanf(f,"%d",&n);
    A[1] = B[1] = C[1] = 1;
    for ( int i = 2 ; i <= n ; ++i ){
        fscanf(f,"%d %d %d",&A[i],&B[i],&C[i]);
    }

    int p = 0;
    for ( int i = 1 ; i <= n ; ++i ){
        v[p][++v[p][0]] = i;
    }

    int depth = 0;
    while ( v[p][0] ){
        int r = v[p][0];

        if ( A[r] == B[r] || B[r] == C[r] || C[r] == A[r] ){
            int poz = 0;
            if ( A[r] == B[r] ) poz = A[r];
            if ( B[r] == C[r] ) poz = B[r];
            if ( C[r] == A[r] ) poz = C[r];

            sol[v[p][poz]] = r;
        }
        else{
            x[1] = A[r],x[2] = B[r],x[3] = C[r];
            sort(x+1,x+4);
            sol[v[p][x[2]]] = r-1,sol[v[p][x[3]]] = r;
        }

        v[1-p][0] = 0;
        for ( int i = 1 ; i <= r ; ++i ){
            if ( !sol[v[p][i]] ){
                v[1-p][++v[1-p][0]] = v[p][i];
            }
        }
        p = 1-p; ++depth;
    }

    fprintf(g,"%d\n",depth);
    for ( int i = 1 ; i <= n ; ++i ){
        fprintf(g,"%d ",sol[i]);
    }
    fprintf(g,"\n");

    fclose(f);
    fclose(g);

    return 0;
}