Cod sursa(job #438509)

Utilizator GeorgianneGircu Georgiana Georgianne Data 10 aprilie 2010 20:38:11
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.42 kb
#include <stdlib.h>
#include <stdio.h>

typedef struct {
  int h;
  int g;
}gutui;

int compare(const void *a, const void *b)
{
    gutui *aa = (gutui *)a;
    gutui *bb = (gutui *)b;
    return (bb->g -aa->g);
}
int sum(int test[],int current_height,int ind,int h_max,int u,gutui *a)
{
    for(current_height;current_height<=h_max+1;current_height+=u-(current_height%u))
            if(test[current_height]==0)
            {
                       test[current_height]=1;
                       return a[ind].g;
            }      
   return 0;
}
int main()
{
    FILE *fis=fopen("gutui.in","r");
    FILE *fis_out=fopen("gutui.out","w");
    int n,h_max,u,i,j,greutate=0;
    fscanf(fis,"%i",&n);
    gutui a[n];
    fscanf(fis,"%i",&h_max);
    fscanf(fis,"%i",&u);
    for(i = 0; i < n; i++)
        fscanf(fis, "%i %i", &a[i].h,&a[i].g);
     qsort(a,n,sizeof(gutui),compare);    //gutui sortate dupa greutate

int test[h_max+1];
for(i=0;i<=h_max;i++)
   test[i]=0; 

for(i=0;i<n;i++)
{  
 if(a[i].h%u >h_max%u)
    greutate+=sum(test,a[i].h+u-(a[i].h%u),i,h_max,u,a);
   else
   greutate+=sum(test,a[i].h,i,h_max,u,a);
}
/*printf("\n");
  for(i = 0; i < n; i++)
  {
        printf("%2i ",a[i].h);
        printf("%2i ",a[i].g);
        printf("\n");
        }
  printf("\n");
  printf("Greutatea maxima este : %i",greutate);*/
  fprintf(fis_out,"%i",greutate);
  //getch();
   return 0; 
}