Cod sursa(job #463170)

Utilizator simona.poilincaSimona Poilinca simona.poilinca Data 14 iunie 2010 18:05:06
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.66 kb
#include <stdio.h>
#include <stdlib.h>

void cop (int a[100][100],int b[100][100],int n){
	int i,j;
	for (i=0;i<n;i++)
		for (j=0;j<n;j++)
			a[i][j]=b[i][j];
}

void citire(FILE *f,int n,int gutui[100][100]){
	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][0] = h;
		gutui[x][1] = g;
		x++;
	}
	
}

int determinare_max (int gutui[100][100], int n){ //determina cea mai de jos gutuie la care poate ajunge
	int i,poz,max;
	max = gutui[0][0];
	for (i=1;i<n;i++)
		if (max <= gutui[i][0]){
			max = gutui[i][0];
			poz = i;
		}
return poz;
}

int selecteaza (int gutui[100][100], int n, int h, int rez[100][100]){ //selecteaza gutuile la care mai poate ajunge
	int i,j=0,n1 = 0;
	for (i=0;i<n;i++)
		if (gutui[i][0] <= h && gutui[i][0] > 0){
			rez[j][0] = gutui[i][0];
			rez[j][1] = gutui[i][1];
			j++;
			n1++;
		}
	return n1;
}
		
int main (){

 int i,n1,j,aux,aux2,n,h,u,jos,poz;
 int suma;
 FILE *f,*g;
 char linie[100];
 int gutui[100][100],rez[100][100];
 
 f = fopen ("gutui.in","r");
 g = fopen ("gutui.out","w");
 
 //citire din fisier
 fgets (linie,100,f);
 sscanf (linie, "%d %d %d",&n,&h,&u);
 citire (f,n,gutui);
 
 suma = 0;
 
 poz = determinare_max(gutui,n);
 suma = suma + gutui[poz][1];
	
 while (h >= gutui[poz][0] && h >= 0){
	gutui[poz][0] = 0;
	h = h - u;
	n1 = selecteaza (gutui,n,h,rez);
	if (n1 == 1){
		suma = suma + gutui[0][1];
		break;
	}
	else {
		cop (gutui,rez,n1);
		poz = determinare_max (gutui,n1);
		suma = suma + gutui[poz][1];
		gutui[poz][0] = 0;
		}
		
}

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

 return 0;
}