Cod sursa(job #434505)

Utilizator alexandra.savaAlexandra Sava alexandra.sava Data 6 aprilie 2010 00:41:15
Problema Gutui Scor 30
Compilator c Status done
Runda teme_upb Marime 1.71 kb
#include<stdio.h>
#include<stdlib.h>

typedef struct gut{
	int h,w;
}Gutuie;



int max(int ** mat,int *v, int m, int n )
{
	int i, max ,p,j;
/*
	for(i = 0; i < n; i++)
		printf(" %d ",v[i]);
	printf("\n");	
*/
	max = v[0];
	p = 0;

	for(i = 1; i < n; i++){
		if(v[i] > max){
			max = v[i];
			p = i;
		}
	}
	if(max != 0){

		for(j = 0; j < m; j++)
			mat[j][p] = 0;
	}
	
	//printf("p este %d si max este %d \n",p,max);
	return max;

}

void read(Gutuie **g, int *n, int *H, int *U, char *file)
{
	FILE *f;
	int i = 0,hh,gg;

	f = fopen(file, "r");

	fscanf(f,"%d %d %d ",n,H,U);
	
	(*g) = (Gutuie *)malloc((*n)*sizeof(Gutuie));
	
	*n = 0;
	while(fscanf(f,"%d %d ",&hh,&gg) > 0 ){
		if(hh <= *H){
			(*g)[i].h = hh;
			(*g)[i].w = gg;
			i++;
			(*n) = (*n) + 1;
		} 
			
	}
/*
	for(i = 0; i < *n;i++){
		printf("gutuia %d are h de %d i cantareste %d \n",i,(*g)[i].h,(*g)[i].w);
	}
		
*/

}

int nrGutui(Gutuie *g, int n, int H, int U)
{
   int m, **mat, i, j, p, nr = 0;

	if(H % U == 0)
   		m = H / U ;
	else
		m = H / U + 1;
	
	mat = (int **)malloc(m * sizeof(int *));

	for(i = 0; i < m; i++ )
		mat[i] = (int *)malloc(n * sizeof(int));


	for(i = 0; i < n; i++){
		if(g[i].h % U == 0)
			p = (g[i].h) / U - 1;
		else
			p = (g[i].h) / U;
	//	printf("%d\n",p);
		for(j = p; j < m; j++){
			mat[j][i] = g[i].w;
		//	printf("i este %d p este %d G este %d \n",i,j,mat[j][i]);
		}

	}


	for(i = 0; i < m; i++){
		for(j = 0; j < n; j++ )
			printf("%d ",mat[i][j]);
		printf("\n");
	}


	for(i = 0; i < m; i++)
		nr = nr + max(mat,mat[i],m,n);
	





return nr;
}
int main()
{	int n,H,U,nr;
	FILE *f;
	Gutuie *g;
	read(&g,&n,&H,&U,"gutui.in");
	nr = nrGutui(g,n,H,U);
	f = fopen("gutui.out","w");
	fprintf(f,"%d",nr);
	fclose(f);

	return 0;

}