Cod sursa(job #434443)

Utilizator stoikStoica George Cristian stoik Data 5 aprilie 2010 22:27:05
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.08 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
  int h;
  int g;
} gutui;

int u;

int compare(const void* a, const void* b)
{
  int h = u;
  gutui* a1 = (gutui *)a;
  gutui* b1 = (gutui *)b;
  if ((a1->h)/h == (b1->h)/h) return (-(a1->g) + (b1->g));
    else return ((b1->h)/h - (a1->h)/h);
}

int main()
{
  int n,h;
  FILE *f = fopen("gutui.in","r");
  FILE *ff = fopen("gutui.out","w");
  
  fscanf(f,"%d %d %d",&n, &h, &u);
  int i;
  gutui *a = (gutui *)calloc(n,sizeof(gutui));
  for (i=0; i<n; i++)
    fscanf(f,"%d %d",&a[i].h, &a[i].g);
  
  qsort (a, n, sizeof(gutui), compare);
  /*for (i=0; i<n; i++)
    printf("**%d %d\n",a[i].h,a[i].g);
  */
  int t = 0;
  int g = 0;
  //g+=a[0].g;
  //int k = a[0].h/u;
  int j;
  //t = a[0].h;
  i = 0;
  for (j=0; j<n; j++)
  {
    //int k1 = a[j].h/u;
    t = a[j].h+i*u;
    if (t<=h)
    {
      //t=a[j].h+i*u;
      //if (t>h) break;
      g+=a[j].g;
      i++;
      //k = k1;
    }
  }
  fprintf(ff,"%d",g);
  
  //printf("%d %d %d %d\n",n,h,u,a[n-1].g);
  fclose(f);
  fclose(ff);
  return 0;
}