Cod sursa(job #439423)

Utilizator Elena.Elena Diana Elena. Data 11 aprilie 2010 16:06:50
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.61 kb
#include <stdio.h>
#include <stdlib.h>

typedef struct{
        long int h,g;
        }gutuie;

//functie care compara doua gutui dupa inaltime
int compara_gutuie(const void *a, const void *b)
{
	gutuie * g1 = (gutuie*) a;
	gutuie * g2 = (gutuie*) b;
	if (g1->h > g2->h) return -1;
	if (g1->h < g2->h) return 1;
	if (g1->g > g2->g) return -1;
	if (g1->g < g2->g) return 1;
	return 0;
//return (bb->g - aa->g);
}

int main(){
    long int N, H, U;
    int max=0;
   //N=nr de gutui din copac; H=inaltimea la care poate ajunge;
    int i,j; 
    FILE* f=fopen("gutui.in","r");
    FILE* p=fopen("gutui.out","w"); 
    fscanf(f,"%ld %ld %ld",&N,&H,&U); 
    gutuie* x;
    x=(gutuie*)malloc(N*sizeof(gutuie));
    for(i=0;i<N;i++){                                                                                                                                                                                                                                                  
                     fscanf(f,"%ld %ld",&x[i].h,&x[i].g);}
                      
    qsort(x,N,sizeof(gutuie),compara_gutuie); //sortez vectorul de gutui descrescator dupa inaltime
    /*for(i=0;i<N;i++){
                      printf("%d %d",x[i].h,x[i].g);
                      printf("\n");
                      }*/
    for(i=0;i<N;i++){
                  if(x[i].h<=H){
                                        max+=x[i].g;
                                        x[i+1].h+=U;}
                     else i++;}
                     
    fprintf(p,"%d",max);
    fclose(f);
    fclose(p);
    //getchar();
    return 0;
}