Cod sursa(job #163663)

Utilizator ada_sAda-Mihaela Solcan ada_s Data 22 martie 2008 14:52:46
Problema Sortare Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda Finala, Clasele 11-12 Marime 1.14 kb
#include <fstream>
std::ifstream f1("sortare.in");
std::ofstream f2("sortare.out");
int n, a[5010], b[5010], c[5010], sol[5010], cont;

void rez(int p, int u, int min, int max);

int main()
{
  int i;
  f1>>n;
  for (i=2; i<=n; i++)
    f1>>a[i]>>b[i]>>c[i];
  rez(1, n, 1, n);
  f2<<cont<<"\n";
  for (i=1; i<=n; i++)
    f2<<sol[i]<<" ";
  return 0;
}//main

void rez(int p, int u, int min, int max)
{
  int pivotMin, pivotMax, pivotMij, l, i;
  if (min==max)
  {
    cont++;
    while (sol[p]>0)
      p++;
    sol[p]=min;
  }//if
  else  
  { 
    l=max-min+1;
    if (a[l]<b[l])
      pivotMin=a[l];
    if (c[l]<pivotMin)
      pivotMin=c[l];
    if (a[l]>b[l])
      pivotMax=a[l];
    if (c[l]>pivotMin)
      pivotMax=c[l];
    pivotMij=a[l]+b[l]+c[l]-pivotMax-pivotMin;
    i=p;
    while (pivotMin>0)
    {
      if (sol[i]==0)
        pivotMin--;
      i++;
    }//while
    sol[i-1]=min;
    i=p;
    pivotMij--;
    while (pivotMij>0)
    {
      if (sol[i]==0)
        pivotMij--;
      i++;
    }//while    
    sol[i-1]=min+1;
    while (sol[p]>0)
      p++;
    while (sol[u]>0)
      u--;
    cont++;
    rez(p, u, min+2, max);
  }//else
}//rez