Cod sursa(job #435630)

Utilizator alex.mireaAlex Mirea alex.mirea Data 7 aprilie 2010 18:21:43
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.08 kb
#include <stdio.h>
#include <stdlib.h>
typedef struct{
	long int h,g;
}gutuie;
int comparaGutui(const void* a,const void* b){
	gutuie *g1,*g2;
	g1 = (gutuie*)a;
	g2 = (gutuie*)b;
	if (g1->h > g2->h) return -1;
	if (g1->h < g2->h) return 1;
	return 0;
}
int main(){
	FILE *fin,*fout;
	long int n,h,u,i,aux,max,s=0;
	char ok;
	gutuie *g;
	fin = fopen("gutui.in","rw");
	fscanf(fin,"%ld %ld %ld",&n,&h,&u);
	//printf("%ld %ld %ld \n",n,h,u);
	g = (gutuie *)malloc(sizeof(gutuie)*n);
	for (i=0;i<n;i++){
		fscanf(fin,"%ld %ld",&((g+i)->h),&((g+i)->g));
	}
	qsort(g,n,sizeof(gutuie),comparaGutui);
	max = g[0].g;
	aux = u;
	for(i=1;i<n;i++)
		if(g[i].h+aux > h){
			if (g[i].g > max)
				max = g[i].g;
		}
		else{
		//	printf("Maximul %ld %ld = %ld\n",i,aux,max);
			s += max;
			ok = 1;
			aux += u;
			max = g[i].g;
		}
	s += max;
	// AFISARE
	/*for (i=0;i<n;i++)
		printf("%ld %ld \n",(g+i)->h,(g+i)->g);*/
	
//	printf("Greutatea maxima = %ld\n",s);
	fout = fopen("gutui.out","wt");
	fprintf(fout,"%ld",s);
	free(g);
	fclose(fin);
	fclose(fout);
	return 0;
}