Pagini recente » Cod sursa (job #1242889) | Cod sursa (job #2419699) | Cod sursa (job #116421) | Cod sursa (job #1408856) | Cod sursa (job #1018873)
#include <stdio.h>
#include<stdlib.h>
struct gutui
{
int greutate,inaltime;
};
struct gutui *v;
void Date(int *N, int *H, int *U)
{
int i;
FILE *f = fopen("gutui.in", "rt");
fscanf(f, "%i%i%i", N,H,U);
v = (struct gutui*)malloc((*N)*sizeof(struct gutui));
for(i = 0; i < *N; ++i)
{
fscanf(f, "%i", &v[i].inaltime);
fscanf(f, "%i", &v[i].greutate);
}
fclose(f);
}
int compare(const void *x, const void *y){
return ((struct gutui *)x)->inaltime - ((struct gutui *)y)->inaltime;
}
int compare2(const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
void scrieDate(int greutateFinal)
{
FILE *f = fopen("gutui.out","w");
fprintf(f,"%d",greutateFinal);
fclose(f);
}
int main()
{
int i,N,H,U,limita,min,cate_pun=0,b[100000],k=0,rez=0,M;
Date(&N,&H,&U);
M = N; // M = rezerva lui N
limita = H - U;
qsort( v, N, sizeof(struct gutui),compare);
min = v[0].inaltime;
while( min <= H )
{
cate_pun++;
min += U;
}
while(limita >= 0)
{
for(i = N-1; i >= 0; i--)
{
if(v[i].inaltime >= limita)
{
b[k] = v[i].greutate;
k++;
}
else
{
break;
}
}
limita = limita - U;
N = M - k;
}
qsort (b, k, sizeof(int), compare2);
for(i = k-1 ; i >= k-cate_pun; i--)
{
rez += b[i];
}
scrieDate(rez);
return 0;
}