Cod sursa(job #434767)
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fin = fopen("gutui.in","r");
FILE *fout = fopen("gutui.out","w");
int nr_gutui,inaltime_maxima,inaltime_crengi;
int i,ok,aux,tmp,j,greutate_maxima=0,inceput,t;
int inaltime_gutuie[255],greutate_gutuie[255];
fscanf(fin,"%d",&nr_gutui);
fscanf(fin,"%d",&inaltime_maxima);
fscanf(fin,"%d",&inaltime_crengi);
for(i=0;i<nr_gutui;i++)
{
fscanf(fin,"%d",&inaltime_gutuie[i]);
fscanf(fin,"%d",&greutate_gutuie[i]);
}
//printf("%d %d %d\n",nr_gutui,inaltime_maxima,inaltime_crengi);
//afisare inainte de sortare
/*for(i=0;i<nr_gutui;i++)
printf("%d %d \n",inaltime_gutuie[i],greutate_gutuie[i]);
printf("\n");*/
//facem o sortare descrescatoare dupa inaltimea gutuielor
do{
ok=0;
for(i=0;i<nr_gutui-1;i++)
{
if (inaltime_gutuie[i]<inaltime_gutuie[i+1])
{
aux = inaltime_gutuie[i]; tmp = greutate_gutuie[i];
inaltime_gutuie[i] = inaltime_gutuie[i+1]; greutate_gutuie[i] = greutate_gutuie[i+1];
inaltime_gutuie[i+1] = aux; greutate_gutuie[i+1] = tmp;
ok=1;
}
/*if (inaltime_gutuie[i] == inaltime_gutuie[i+1])
{
aux = inaltime_gutuie[i]; tmp = greutate_gutuie[i];
inaltime_gutuie[i] = inaltime_gutuie[i+1]; greutate_gutuie[i] = greutate_gutuie[i+1];
inaltime_gutuie[i+1] = aux; greutate_gutuie[i+1] = tmp;
}*/
}
}while(ok);
//afisare dupa sortare
/*for(i=0;i<nr_gutui;i++)
printf("%d %d \n",inaltime_gutuie[i],greutate_gutuie[i]);*/
i=1;
while(i<nr_gutui)
{
if (inaltime_gutuie[i]/10 == inaltime_gutuie[i-1]/10)
{
inceput=i-1;
while(inaltime_gutuie[i]/10 == inaltime_gutuie[i-1]/10 && i<nr_gutui)
i++;
//acum facem sortarea dupa greutate
do{
ok=0;
for(j=inceput;j<=i-2;j++)
{
if (greutate_gutuie[j]<greutate_gutuie[j+1])
{
aux = greutate_gutuie[j]; tmp = inaltime_gutuie[j];
greutate_gutuie[j] = greutate_gutuie[j+1]; inaltime_gutuie[j] = inaltime_gutuie[j+1];
greutate_gutuie[j+1] = aux; inaltime_gutuie[j+1] = tmp;
ok=1;
}
}
}while(ok);
}
else{
i++;}
}
//afisare dupa sortarea - greutate
/* printf("\n");
for(i=0;i<nr_gutui;i++)
printf("%d \n",greutate_gutuie[i]);
printf("\n");
for(i=0;i<nr_gutui;i++)
printf("%d %d \n",inaltime_gutuie[i],greutate_gutuie[i]);*/
for(i=0;i<nr_gutui;i++)
{
if (inaltime_gutuie[i] < inaltime_maxima)
{
greutate_maxima+=greutate_gutuie[i];
printf("\n");
for(j=i+1;j<nr_gutui;j++)
{
inaltime_gutuie[j]+=inaltime_crengi;
}
}
// printf("%d ",greutate_maxima);
if (inaltime_gutuie[i] == inaltime_maxima)
{
for(j=i+1;j<nr_gutui;j++)
{
if (inaltime_gutuie[j]==inaltime_maxima && inaltime_gutuie[j+1]+inaltime_crengi==inaltime_maxima && greutate_gutuie[j]>greutate_gutuie[j+1])
{
if(greutate_gutuie[j] > greutate_gutuie[i])
{
greutate_maxima+=greutate_gutuie[j];
for(t=j;t<nr_gutui;t++)
{
inaltime_gutuie[t]+=inaltime_crengi;
}
break;
}
else{
greutate_maxima+=greutate_gutuie[i];
for(t=j;t<nr_gutui;t++)
{
inaltime_gutuie[t]+=inaltime_crengi;
}
break;
}
break;
}
if(inaltime_gutuie[j] >=inaltime_maxima-inaltime_crengi && inaltime_gutuie[j]<inaltime_maxima)
{
if(greutate_gutuie[j]>greutate_gutuie[i])
{
greutate_maxima+=greutate_gutuie[j];
for(t=j;t<nr_gutui;t++)
{
inaltime_gutuie[t]+=inaltime_crengi;
}
break;
}
else{
greutate_maxima+=greutate_gutuie[i];
for(t=j;t<nr_gutui;t++)
{
inaltime_gutuie[t]+=inaltime_crengi;
}
break;
}
break;
}
}
}
}
if (inaltime_gutuie[nr_gutui-1] == inaltime_maxima)
greutate_maxima+=greutate_gutuie[nr_gutui-1];
printf("%d\n",greutate_maxima);
fprintf(fout,"%d",greutate_maxima);
fclose(fout);
fclose(fin);
return 0;
}