Pagini recente » Cod sursa (job #1327318) | Cod sursa (job #2017234) | Cod sursa (job #849898) | Cod sursa (job #1811969) | Cod sursa (job #163663)
Cod sursa(job #163663)
#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