Cod sursa(job #436985)

Utilizator bogdanl_yexbogdan bogdanl_yex Data 9 aprilie 2010 02:35:03
Problema Gutui Scor 90
Compilator cpp Status done
Runda teme_upb Marime 1.96 kb
#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=0;
     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].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; 
   
}