Cod sursa(job #441436)

Utilizator catalin_olariOlari Catalin Georgel catalin_olari Data 12 aprilie 2010 22:11:11
Problema Gutui Scor 50
Compilator c Status done
Runda teme_upb Marime 1.42 kb
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

typedef struct {
        unsigned long int h,g;
        } gutui;
int compare(const void *a,const void *b)
{
    return ((*(gutui *)b).h-(*(gutui *)a).h);
}
int min(long v[],int n,int* index)
{
    int min=v[0],i=1;
    *index=0;
    for(; i<n; i++)
        if(v[i]<min)
                {
                min=v[i];
                *index=i;
                }
        return min;
}
int main(int argc, char *argv[])
{
  unsigned long int n, hmax, u,i,j,s, sum=0, k=0, minim;
  int index;
  FILE* f = fopen("gutui.in", "r");
  fscanf(f,"%lu", &n);
  fscanf(f,"%lu", &hmax);
  fscanf(f,"%lu", &u);
  gutui a[100000],  candidat;
  long rez[100000],t; 
  for (i=0;i<n;i++) 
      fscanf(f,"%lu %lu", &a[i].h, &a[i].g);
  
  qsort(a,n,sizeof(gutui),compare);
  
  for (i=0; i<n; i++)
  { 
    
  candidat=a[i];
  if(candidat.h <= hmax)
  {
     rez[k]=candidat.g;  
     hmax-=u;
     k++;
  }
  else
   if(k>0)
      {
       //  for(t=0;t<k;t++)
       //   printf("%i ",rez[t]);
         minim = min(rez,k,&index);
               if(minim < candidat.g)
                        rez[index]=candidat.g;
         //printf("index = %i\n",index);
      }
 }
  for(s=0; s<k; s++)
   sum+=rez[s];
   printf("suma: %lu", sum); 
   FILE* g=fopen("gutui.out", "w");
  fprintf(g,"%lu",sum);
  fclose(f);
  fclose(g);
  //getch();
  return 0;
}