Pagini recente » Cod sursa (job #226471) | Cod sursa (job #1725617) | Cod sursa (job #312673) | Cod sursa (job #628054) | Cod sursa (job #463725)
Cod sursa(job #463725)
#include <stdlib.h>
#include <stdio.h>
typedef struct gutuie {
long inaltime;
long greutate;
long level;
} Gutui;
int comp(const void *a, const void *b)
{
Gutui *ia = (Gutui *)a;
Gutui *ib = (Gutui *)b;
return (ia->greutate < ib->greutate);
}
int main()
{
long H,U,MASA=0;
long i,N,l,k=0,max_level=0,j;
FILE *f;
f=fopen("gutui.in","r");
fscanf(f,"%ld",&N);
fscanf(f,"%ld",&H);
fscanf(f,"%ld",&U);
Gutui *G;
G=(Gutui*)malloc(N*sizeof(Gutui));
for (i=0;i<N;i++)
{
fscanf(f,"%ld",&G[i].inaltime);
fscanf(f,"%ld",&G[i].greutate);
}
for (i=0;i<N;i++)
{
G[i].level = (H-G[i].inaltime)/U+1;
if (G[i].level > max_level)
max_level = G[i].level;
}
int *V;
V=(int*)calloc(max_level,sizeof(int));
qsort(G,N,sizeof(Gutui),comp);
//CALCUL MASA DE FRUCT ACUMULUATA
for (i=0;i<N;i++)
{
/*for (l=0;l<max_level;l++)
printf("%d ",V[l]);
printf("\n"); */
if (V[G[i].level-1] == 0)
{
V[G[i].level-1]=1;
MASA+=G[i].greutate;
k++;
//printf("adaugat %ld\n",G[i].greutate);
}
else if (V[G[i].level-1] == 1)
{
j=G[i].level-1;
while (V[j] == 1)
{
if (j==0)
break;
j--;
}
if (V[j] == 0)
{
V[j]=1;
MASA+=G[i].greutate;
k++;
//printf("adaugat %ld\n",G[i].greutate);
}
}
}
//for (i=0;i<N;i++)
//printf("Gutuia \t%ld:\t%ld\t%ld\t%ld\t\n",i,G[i].inaltime,G[i].greutate,G[i].level);
FILE *f2;
f2=fopen("gutui.out","w");
fprintf(f2,"%ld\n",MASA);
fclose(f2);
return 0;
}