Cod sursa(job #429198)

Utilizator oana.vasiuVasiu Oana-Alexandra oana.vasiu Data 29 martie 2010 22:04:00
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.47 kb
#include<stdio.h>
#include<stdlib.h>
struct gutui{
int h;
int g;
int nr_pasi;
};
typedef int (*compfn)(const void*, const void*);

int n, H, U;

int comparatorpasi(struct gutui *a, struct gutui *b){
	return (a->nr_pasi - b->nr_pasi);
}
int comparatorg(struct gutui *a, struct gutui *b){
	return (b->g - a->g);
}
int comparatorbla(struct gutui *a, struct gutui *b){
        return ( (b->g - b->nr_pasi) - (a->g - a->nr_pasi) );
}
//sortare dupa numarul de pasi pana nu se mai ajunge la gutui


int main(){
FILE* f=fopen("gutui.in","r");
FILE* g=fopen("gutui.out", "w");
fscanf(f,"%i %i %i",&n,&H,&U);
//printf("%i %i %i \n",n,H,U);
struct gutui v[n];
int i;
int max=0;
for (i = 0 ; i < n ; i++){
	fscanf(f,"%i %i", &v[i].h, &v[i].g);
	v[i].nr_pasi =(( H - v[i].h ) / U) + 1 ;
	if (max<v[i].nr_pasi) max=v[i].nr_pasi;
	}
//printf("%i\n", max);
//for (i = 0 ; i < n ; i++)
//	printf("%i %i\n", v[i].h, v[i].g);
qsort(v, n, sizeof(struct gutui), (compfn)comparatorg);
qsort(v, n, sizeof(struct gutui),(compfn)comparatorpasi);
qsort(v, n, sizeof(struct gutui),(compfn)comparatorbla);

//printf("\n");
for (i=0; i<n; i++)
        printf("%i %i %i\n", v[i].h, v[i].g, v[i].nr_pasi);

int pas_curent=max;
int suma=0;
int m,j;
i=0;
while ( (pas_curent > 0) ){
	m=0;
	j=0;
	if (v[i].nr_pasi <= max){
		printf("%i \n",v[i].g);
		suma=suma+v[i].g;
		pas_curent--;}
	i++;
	//while (v[i].nr_pasi==v[i-1].nr_pasi)
	//	i++;
	//if (i==n) i=0;
}
//printf("%i",suma);
fprintf(g,"%i",suma);
close(f); close(g);
return 0;
}