Pagini recente » Cod sursa (job #1780257) | Cod sursa (job #847604) | Cod sursa (job #2790117) | Cod sursa (job #779375) | Cod sursa (job #435628)
Cod sursa(job #435628)
#include <stdio.h>
#include <stdlib.h>
typedef struct{
long int h,g;
}gutuie;
int comparaGutui(const void* a,const void* b){
gutuie *g1,*g2;
g1 = (gutuie*)a;
g2 = (gutuie*)b;
if (g1->h > g2->h) return -1;
if (g1->h < g2->h) return 1;
return 0;
}
int main(){
FILE *fin,*fout;
long int n,h,u,i,aux,max,s=0;
char ok;
gutuie *g;
fin = fopen("gutui.in","rw");
fscanf(fin,"%ld %ld %ld",&n,&h,&u);
//printf("%ld %ld %ld \n",n,h,u);
g = (gutuie *)malloc(sizeof(gutuie)*n);
for (i=0;i<n;i++){
fscanf(fin,"%ld %ld",&((g+i)->h),&((g+i)->g));
}
qsort(g,n,sizeof(gutuie),comparaGutui);
max = g[0].g;
aux = u;
for(i=1;i<n;i++)
if(g[i].h+aux > h){
if (g[i].g > max)
max = g[i].g;
}
else{
// printf("Maximul %ld %ld = %ld\n",i,aux,max);
s += max;
ok = 1;
aux += u;
max = g[i].g;
}
s += max;
// AFISARE
/*for (i=0;i<n;i++)
printf("%ld %ld \n",(g+i)->h,(g+i)->g);*/
// printf("Greutatea maxima = %ld\n",s);
fout = fopen("gutui.out","wt");
fprintf(fout,"%ld",s);
free(g);
fclose(fin);
fclose(fout);
return 1;
}