Cod sursa(job #441476)

Utilizator AngelloAndrei Pricop Angello Data 12 aprilie 2010 22:30:48
Problema Gutui Scor 100
Compilator c Status done
Runda teme_upb Marime 1.21 kb
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

typedef struct {
        int h,g;
        } gutui;
int compare(const void *a,const void *b)
{
    return ((*(gutui *)b).h-(*(gutui *)a).h);
}
int min(int 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[])
{
  int n, hmax, u,i,s, sum=0, k=0, minim;
  int index;
  FILE* f = fopen("gutui.in", "rt");
  fscanf(f,"%i", &n);
  fscanf(f,"%i", &hmax);
  fscanf(f,"%i", &u);
  gutui a[n],candidat;
  int rez[n]; 
  for (i=0;i<n;i++) 
      fscanf(f,"%i %i", &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,"%i",sum);
  fclose(f);
  fclose(g);
  return 0;
}