Cod sursa(job #438265)

Utilizator vlad30Mateescu Vlad vlad30 Data 10 aprilie 2010 17:03:26
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.34 kb
#include <stdio.h>
#include <stdlib.h>
#define N 10000

void citire(FILE *f,int n,int gutui[N][N]){
	int i,h,g,x=0;
	char linie[100];
	for (i=0;i<n;i++){
		fgets (linie,100,f);
		sscanf (linie,"%d %d",&h,&g);
		gutui[x][1] = h;
		gutui[x][2] = g;
		x++;
	}	
}

void determinare_max (int gutui[N][N], int n, int max, int k){ //determina cel mai de jos gutuie la care poate ajunge
	int i;
	max = gutui[0][0];
	for (i=1;i<n;i++)
		if (max < gutui[i][0]){
			max = gutui[i][0];
			k = i;
		}
}

int selecteaza (int gutui[N][N], int n, int h, int rez[N][N]){ //selecteaza gutuile la care mai poate ajunge
	int i,j=0;
	for (i=0;i<n;i++)
		if (gutui[i][0] < h){
			rez[j][0] = gutui[i][0];
			rez[j][1] = gutui[i][1];
			j++;
		}
	return n;
}
		
int main (){
 int i,n1,n,h,u,jos,poz;
 int suma = 0;
 FILE *f,*g;
 char linie[100];
 int gutui[N][N],rez[N][N];
 
 f = fopen ("gutui.txt","r");
 g = fopen ("out.txt","w");
 
 //citire din fisier
 fgets (linie,100,f);
 sscanf (linie, "%d %d %d",&n,&h,&u);
 citire (f,n,gutui);
 
 determinare_max (gutui,n,jos,poz); 
 
 while (h > jos){
	suma = suma + gutui[1][poz];
	gutui[0][poz] = -1;
	h = h - u;
	n1 = selecteaza (gutui,n,h,rez);
	if (n1 == 1)
		suma = suma + rez[0][1];
	else 
		determinare_max (rez,n1,jos,poz);
}

fprintf (g,"%d\n",suma);

return 0;
}