Cod sursa(job #1126459)

Utilizator Raducu1992Raducu Raducu1992 Data 26 februarie 2014 23:34:18
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 2.03 kb
#include <stdio.h>
#include<stdlib.h>
int mai_mult = 0,cules = 0;
struct gutui
{
    int inaltime;
    int greutate;
};
struct gutui *v;
int compare(const int * a, const int * b)
{
 return *a - *b;
}
void scrieDate(int s)
{
    FILE *f = fopen("gutui.out","w");
     fprintf(f,"%d",s);
     fclose(f);
}
int culege(int nivel,int **mgutui,int dim)
{
     int i,gutui_culese = -1;
     if( nivel >= dim )
        return cules;
     if( mgutui[nivel][dim-1] == 0 )
     {
           mai_mult++;
           return culege(nivel+1,mgutui,dim);
     }
     else
     {
         for( i = dim-1; i >= dim-mai_mult-1 ; --i )
         {
             if( mgutui[nivel][i] != 0 )
             {
                cules += mgutui[nivel][i];
                gutui_culese++;
             }
            else
                break;
             if( gutui_culese > 0 )
                mai_mult = gutui_culese;
         }
     }
           return culege(nivel+1,mgutui,dim);
}
int main()
{
    int N,H,U,i,**mgutui,gutui_culese=0,linii,coloana=0,j;

    mgutui = (int**)calloc(1000,sizeof(int*));
    for( i = 0; i < 1000; i++ )
        mgutui[i] = (int*)calloc(1000,sizeof(int));

    FILE *f = fopen("gutui.in","r");
    fscanf(f,"%d%d%d",&N,&H,&U);
     for( linii = 0; linii < N; ++linii )
        for( coloana = 0; coloana < N; ++coloana )
                mgutui[linii][coloana] = 0;
    v = (struct gutui*)calloc(N,sizeof(struct gutui));
    for(i = 0; i < N; ++i)
    {
        fscanf(f,"%d %d",&v[i].inaltime,&v[i].greutate);
        linii = (H - v[i].inaltime) / U;
        for( coloana = 0; coloana < N ; ++coloana )
        {
            if( mgutui[linii][coloana] == 0)
            {
                mgutui[linii][coloana] = v[i].greutate;
                break;
            }
        }
    }
   for( i = 0 ; i < N; ++i)
        qsort ( mgutui[i] , N, sizeof(int), compare);
       gutui_culese = culege(0,mgutui,N);
    //    printf("[[ %d ]]",gutui_culese);
            scrieDate(gutui_culese);
 return 0;
}