Cod sursa(job #436974)
#include <stdio.h>
#include <stdlib.h>
typedef struct GUT{
int h;
int g;
}GUT;
typedef struct minpoz{
int min;
int poz;
}minpoz;
int compare (const void * a, const void * b)
{
return ( *(int*)b - *(int*)a );
}
minpoz Minim(int* v,int dim){
minpoz pm;
int i;
int min=50000;
int poz;
for(i=0;i<dim;i++){
if(v[i]<min){
min=v[i];
poz=i;
}}
pm.min=min;
pm.poz=poz;
return pm;
}
int main(){
FILE* fisierin=fopen("gutui.in","r");
FILE* fisierout=fopen("gutui.out","w");
int n,h,u,i;
GUT* vec;
int* aux;
fscanf(fisierin,"%d ",&n);
printf("%d \n",n);
fscanf(fisierin,"%d ",&h);
printf("%d \n",h);
fscanf(fisierin,"%d ",&u);
printf("%d \n",u);
vec=(GUT*)malloc(n*sizeof(GUT));
aux=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++){
fscanf(fisierin,"%d",&vec[i].h);
fscanf(fisierin,"%d",&vec[i].g);
printf("%d %d \n",vec[i].h,vec[i].g);
}
qsort (vec, n, sizeof(GUT), compare);
printf("////////////////////////\n");
for(i=0;i<n;i++){
printf("%d %d \n",vec[i].h,vec[i].g);
// aux[i]=0;
}
printf("////////////////////////\n");
aux[0]=vec[0].g;
int dim=1;
minpoz mp;
h=h-u;
for(i=1;i<n;i++){
if(vec[i].h<=h){
aux[dim]=vec[i].g;
h=h-u;
dim++;
printf("aici scade inaltimea:%d \n ",h); }
else{
mp=Minim(aux,dim);
printf("aici calculez min din vec aux:%d %d \n",mp.min,mp.poz);
if(vec[i-1].g <= mp.min){
aux[mp.poz]=vec[i].g;
printf("acum inlocuiesc :%d",aux[mp.poz]);
}
}
}
int cant_max=0;
for(i=0;i<dim;i++){
cant_max=cant_max+aux[i];
printf("%d ",aux[i]);
}
printf("%d ",cant_max);
fprintf(fisierout,"%d \n",cant_max);
fclose(fisierin);
fclose(fisierout);
getchar();
return 0;
}