Cod sursa(job #441466)

Utilizator AngelloAndrei Pricop Angello Data 12 aprilie 2010 22:26:20
Problema Gutui Scor 50
Compilator c Status done
Runda teme_upb Marime 1.26 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,s, sum=0, k=0, minim;
  unsigned long int index;
  FILE* f = fopen("gutui.in", "rt");
  fscanf(f,"%lu", &n);
  fscanf(f,"%lu", &hmax);
  fscanf(f,"%lu", &u);
  gutui a[n],candidat;
  long rez[n]; 
  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)
  {
         minim = min(rez,k,&index);
         if(minim < candidat.g)
                  rez[index]=candidat.g;
  }
 }
  for(s=0; s<k; s++)
   sum+=rez[s];

  FILE* g=fopen("gutui.out", "wt");
  fprintf(g,"%lu",sum);
  fclose(f);
  fclose(g);
  return 0;
}