Cod sursa(job #438367)

Utilizator alexfloFlorea Alexandru alexflo Data 10 aprilie 2010 18:19:51
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.27 kb
#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[]){

	FILE *fin,*fout;
	int i,j,U,H,N,g_max,max,ales;
	int **gutui,**mat,*culeasa;
	
	if(argc!=3){
		printf("Numar incorect de parametrii !\n");
		exit(0);
	}
	
	//se deschid fisere si se citesc datele de intrare
	fin=fopen(argv[1],"r");
	fout=fopen(argv[2],"w");
	fscanf(fin,"%d %d %d",&N,&H,&U);
	
	mat=(int**)malloc(N*sizeof(int*));
	for(i=0;i<N;i++)
		mat[i]=(int*)malloc(2*sizeof(int));
		
	gutui=(int**)malloc(N*sizeof(int*));
	for(i=0;i<N;i++)
		gutui[i]=(int*)malloc(2*sizeof(int));
	culeasa=(int*)calloc(N,sizeof(int));
	
	for(i=0;i<N;i++){
		fscanf(fin,"%d %d\n",&mat[i][0],&mat[i][1]);
	}
	
	for(i=0;i<N;i++){
		gutui[i][0]=(H-mat[i][0])/U+1;
		gutui[i][1]=mat[i][1];
	}	

	for(i=0;i<N;i++){
		for(j=i;j<N;j++){
			if(gutui[i][0]<gutui[j][0]){
				int aux1=gutui[i][0];
				int aux2=gutui[i][1];
				gutui[i][0]=gutui[j][0];
				gutui[i][1]=gutui[j][1];
				gutui[j][0]=aux1;
				gutui[j][1]=aux2;
			}
			
		}
	}

	max=0;
	g_max=0;
	ales=-1;
	for(i=gutui[0][0];i>0;i--){
		for(j=0;j<N;j++){
			if(gutui[j][0]>=i && culeasa[j]==0){
				if(gutui[j][1]>max){
					max=gutui[j][1];
					ales=j;
				}		
			}
			
		}
		culeasa[ales]=1;
		g_max+=max;
		max=0;
		ales=-1;
	}

	fprintf(fout,"%d",g_max);
	

	

	return 0;
}