Cod sursa(job #1667552)

Utilizator rughibemBelcineanu Alexandru Ioan rughibem Data 29 martie 2016 00:10:00
Problema Sortare Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<stdio.h>
#include<algorithm>
#define MAXN 5005
FILE *f=fopen("sortare.in","r"), *g=fopen("sortare.out","w");

using namespace std;

struct Pivot{ int A, B, C; } P[MAXN];

int N, oldN, SOL[MAXN], poz[MAXN];

    // poz = pozitiile ramase

void Citire(){
int i;

    fscanf(f,"%d\n",&N);
    oldN = N;

    for(i=2;i<=N;i++)
        fscanf(f,"%d %d %d\n",&P[i].A,&P[i].B,&P[i].C);

    for(i=1;i<=N;i++)
        poz[i] = i;

}

void Rezolvare(){
int vp[4], i, REZ = 0;

    while( N > 2 ){ REZ ++;

        vp[1] = poz[ P[N].A ];
        vp[2] = poz[ P[N].B ];
        vp[3] = poz[ P[N].C ];

        sort(vp+1,vp+4);

        if( vp[1] == vp[2] || vp[2] == vp[3] )
            SOL[ vp[2] ] = N;

        else{

            SOL[ vp[1] ] = N;
            SOL[ vp[2] ] = N-1;

        }

        N = 0;
        for(i=1;i<=oldN;i++)
            if( SOL[i] == 0 )
                poz[++N] = i;


    }

    if( N == 1 ){

        REZ ++;
        SOL[ poz[1] ] = N;

    }

    fprintf(g,"%d\n",REZ);
    for(i=1;i<=oldN;i++)
        fprintf(g,"%d ",SOL[i]);

}

int main(){

    Citire();
    Rezolvare();

return 0;
}