Pagini recente » Rating Vasiu Vasile (VVasile) | Borderou de evaluare (job #1441576) | Borderou de evaluare (job #2541298) | Cod sursa (job #1163360) | Cod sursa (job #441355)
Cod sursa(job #441355)
#include<stdio.h>
#include<stdlib.h>
/* --- Chiriac Cristina 321CB --- */
/* --- Tema 1, Problema 2 --- */
typedef struct gutui
{
int inaltime,greutate;
}Gutui;
/*int sortareInaltime(const void *a, const void *b)
{
Gutui *A =(Gutui*) a;
Gutui *B =(Gutui*) b;
if( A->inaltime > B->inaltime )
return -1;
else if( A->inaltime < B->inaltime )
return 1;
else
return A->greutate - B->greutate;
}*/
int sortareGreutate(const void *a, const void *b)
{
Gutui *A =(Gutui*) a;
Gutui *B =(Gutui*) b;
return B->greutate - A->greutate ;
}
int main()
{
int nrgutui,H,U,nivelMax,i,j,inalt,greut,suma = 0,max = 0;
FILE *f,*g;
f = fopen("gutui.in","rt");
g = fopen("gutui.out","wt");
fscanf(f,"%i%i%i",&nrgutui,&H,&U);
Gutui *vectgutui;
vectgutui = (Gutui*) malloc(sizeof(Gutui) * nrgutui);
nivelMax = H/U;
int * vect = (int*) malloc(sizeof(int)*(nivelMax+1));
for( i = 0 ; i < nivelMax ; i++ )
vect[i] = 0;
for( i = 0 ; i < nrgutui ; i++ )
{
fscanf(f,"%i%i",&inalt,&greut);
vectgutui[i].inaltime = inalt;
vectgutui[i].greutate = greut;
if( inalt > H )
{
i--;
nrgutui--;
}
else
{
if( (vectgutui[i].inaltime%U) > (H%U) )
vectgutui[i].inaltime = nivelMax - vectgutui[i].inaltime/U ;
else
vectgutui[i].inaltime = nivelMax - vectgutui[i].inaltime/U + 1;
}
}
qsort(vectgutui,nrgutui,sizeof(Gutui),sortareGreutate);
for( i = 0 ; i < nrgutui ; i++ )
{
printf("%i %i\n",vectgutui[i].inaltime,vectgutui[i].greutate);
}
int total=0;
for( i = 0 ; i < nrgutui ; i++ )
{
if( vect[ vectgutui[i].inaltime ] != 0 )
{
for( j = vectgutui[i].inaltime - 1; j > 0 ; j--)
{
if( vect[j] == 0 )
{
total+=vectgutui[i].greutate;
vect[j] = 1;
break;
}
}
}
else
{
vect[ vectgutui[i].inaltime ]=1;
total+=vectgutui[i].greutate;
}
}
fprintf(g,"%i ", total);
fclose(f);
fclose(g);
}