Cod sursa(job #441577)

Utilizator MikhinjaCatalina Mihai Vlad Mikhinja Data 12 aprilie 2010 23:23:45
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.27 kb
/*
Catalina Mihai Vlad
334CB
Problema - Gutui
Complexitate O(N^2)
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
int g;
int h;
} gutuie;
int comp(const void *a,const void *b){
 gutuie *x, *y;
x=( gutuie*)a;
y=( gutuie*)b;
return (x->h - y->h);
}
int main(void){
int N,H,U,G=0,i,j,aux,aux2;
FILE *f;
f=fopen("gutui.in","r");
fscanf(f,"%i%i%i",&N,&H,&U);
gutuie gutui[N];
int indici[N];
for(i=0;i<N;i++){
	fscanf(f,"%i%i",&(gutui[i].h),&(gutui[i].g));
	printf("gutuia %3i g=%3i h=%3i\n",i,gutui[i].g,gutui[i].h);
}
fclose(f);

qsort(gutui,N,sizeof(gutui),comp);
printf("====\n");
for(i=0;i<N;i++){
	
	printf("gutuia %3i g=%3i h=%3i\n",i,gutui[i].g,gutui[i].h);
}
aux=0;//aux va contoriza cate gutui au fost culese
for(i=0;i<N;i++)
	if( gutui[i].h + aux * U <= H ){
//		m[i] = 1;
		//printf("G=%3i gutui[%3i]=%3i\n",G,i,gutui[i].g);
		G   += gutui[i].g;
		
		indici[aux++]=i;
		
		
	}
	else {aux2=aux;
		indici[aux]=i;
		for(j=0;j<aux;j++)
			if(gutui[indici[j]].g < gutui[indici[aux2]].g)
				aux2=j;
		if(aux2!=aux){
			printf("G %3i, gutuia %3i\n",G,i);
			G += gutui[indici[i]].g - gutui[indici[aux2]].g;
			indici[aux2]=i;
		}
	}

f=fopen("gutui.out","w");
fprintf(f,"%i",G);
fclose(f);
return 0;
}