Pagini recente » Borderou de evaluare (job #2857529) | Borderou de evaluare (job #1530383) | Borderou de evaluare (job #1381970) | Profil mihaits | Cod sursa (job #441360)
Cod sursa(job #441360)
#include<stdio.h>
#include<stdlib.h>
/* --- Chiriac Cristina 321CB --- */
/* --- Tema 1, Problema 2 --- */
typedef struct gutui
{
int inaltime,greutate;
}Gutui;
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;
FILE *f,*g;
f = fopen("gutui.in","rt");
g = fopen("gutui.out","wt");
fscanf(f,"%i%i%i",&nrgutui,&H,&U);
Gutui *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);
return 0;
}