Cod sursa(job #429371)

Utilizator Th30dorGherghescu Teo Th30dor Data 30 martie 2010 02:35:47
Problema Gutui Scor 10
Compilator cpp Status done
Runda teme_upb Marime 1.2 kb
#include <stdio.h>
#include <stdio.h>
//#include <file.h>
#include <stdlib.h>


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


int compare (const void * a, const void * b)
{
	gutuie *ax = (gutuie * )a;  
	gutuie *bx = (gutuie *)b;
	return (*ax).h-(*bx).h;
//	return ( (*(int *)a).h-(*(int *)b).h );
}


int main(){

int N,H,U;

FILE *in;
FILE *out;
in = fopen("gutui.in","r");
out=fopen("gutui.out","w");
fscanf(in,"%d",&N);//nr de gutui
fscanf(in,"%d",&H);//inaltimea la care ajunge Gigel
fscanf(in,"%d",&U);//cu cat se ridica crengile



gutuie *vGut;//vectorul de gutui :D

vGut = (gutuie *)malloc(N*sizeof(gutuie));


//citire din fisier
for(int i=0;i < N;i++){
	fscanf(in,"%d",&vGut[i].h);
	fscanf(in,"%d",&vGut[i].g);

	}


qsort (vGut, N, sizeof(gutuie), compare);//sortez vectorul de gutui

int copieH = H;
int max=0;
int suma=0;

int copieN=N;
max=0;
while(copieH>0){
	max=0;
	for(int i=0;i<copieN;i++){
	if(copieH >= vGut[i].h && copieH <= vGut[i].h+U ){
			
			if(vGut[i].g >= max)
				max=vGut[i].g;
			
			}
	else {
		if(copieH > vGut[i].h+U){
				suma=suma+vGut[i].g;
				vGut[i].g=0;
				}
		
		}		
				
		}
	suma=suma+max;
	
	copieH=copieH-U;
	}



fprintf(out,"%d",suma);	
fclose(in);
fclose(out);	
	

}