Cod sursa(job #2062120)

Utilizator ScarymovieMocanu Alexandru Scarymovie Data 9 noiembrie 2017 23:47:02
Problema Sortare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#define NMAX 5005
using namespace std;
int nr[NMAX][3],v[NMAX]={},n,NrPasi=0;
ifstream f("sortare.in");
ofstream g("sortare.out");
void Insereaza(int poz,int x)
{
    int aux=x,aux2=v[poz],i;
    for(i=poz;i<x;++i) {v[i]=aux;aux=aux2;aux2=v[i+1];}
    v[x]=aux;
}
void solutie(int St,int Dr)
{
    int Lungime=Dr-St+1,pozMax,pozMax2;
    int a=nr[Lungime][0],b=nr[Lungime][1],c=nr[Lungime][2];
    if(Lungime==0) return;
    if(Lungime==1) {Insereaza(1,1);return;}
    NrPasi++;
    if(a==c) a^=b^=a^=b;
    if(a==b || b==c) {pozMax=b;solutie(St,Dr-1);Insereaza(pozMax,Dr);}
    else
    {
        pozMax=a;
        pozMax2=(b>c?b:c);
        solutie(St,Dr-2);
        Insereaza(pozMax,Dr-1);
        Insereaza(pozMax2,Dr);
    }
}
int main()
{
    f>>n;
    int i;
    for(i=2;i<=n;++i) f>>nr[i][0]>>nr[i][1]>>nr[i][2];
    solutie(1,n);
    g<<NrPasi<<'\n';
    for(i=1;i<=n;++i) g<<v[i]<<' ';
    return 0;
}