Cod sursa(job #437563)

Utilizator dragos_dDiaconescu Dragos dragos_d Data 9 aprilie 2010 22:01:39
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.09 kb
#include<stdio.h>
#include<stdlib.h>

#define N 100000
typedef struct gutui
{
   int inaltime;
   int greutate;
   int moment;   //momentul la care poate fi culeasa
}gutuie;
int compare(const void *p1,const void *p2)
{
   float aux1,aux2;
   gutuie *g1,*g2;
   g1=(gutuie*)p1; 
   g2=(gutuie*)p2;
   aux2=(float)g2->greutate/g2->moment;
   aux1=(float)g1->greutate/g1->moment;
   if(aux2>aux1)
        return 1;
   else
     if(aux2==aux1)
            return g1->moment-g2->moment;
   return -1;
}  
int maxim(int a,int b)
{
   if(a>b)
     return a;
   return b;
}
int main()
{
  int i,n,h,u;
  int max=0;
  int nr,sum=0,aux;
  FILE *in,*out;
  in=fopen("gutui.in","r");
  out=fopen("gutui.out","w");
  gutuie gut[N];
  fscanf(in,"%d",&n);
  fscanf(in,"%d",&h);
  fscanf(in,"%d",&u);
  for(i=0;i<n;i++){
        fscanf(in,"%d",&gut[i].inaltime);
        fscanf(in,"%d",&gut[i].greutate);
        gut[i].moment=(h-gut[i].inaltime)/u+1;
  }
  qsort(gut,n,sizeof(gutuie),compare);
  for(i=0;i<n;i++)
      if(i+1<=gut[i].moment)
           max=max+gut[i].greutate;     
  fprintf(out,"%d",max);
  return 0;
}