Cod sursa(job #434567)

Utilizator violeta.marinVioleta Marin violeta.marin Data 6 aprilie 2010 02:10:59
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.37 kb
#include <stdio.h>
#include <stdlib.h>


struct gut{
	unsigned int inalt;	
	unsigned int greu;
	  };

int compare (const void * a, const void * b)
{
  //return ( *(int*)a - *(int*)b );
	return -((*(struct gut*)a).inalt - (*(struct gut*)b).inalt); 	
}

	
int main(){
	int i, j;
	FILE *f = fopen("gutui.in","r");
	unsigned int n = 0,h = 0 ,u = 0, max = 0, gr;
	fscanf(f, "%d", &n);
	fscanf(f, "%d", &h);
	fscanf(f, "%d", &u);
	
	struct gut *gutui = (struct gut *)malloc(n * sizeof(struct gut));
	for (i = 0; i < n; i++)
		{
		fscanf(f, "%u", &gutui[i].inalt);
		fscanf(f, "%u", &gutui[i].greu);
		}

	qsort(gutui, n, sizeof(struct gut), compare);
	/*for (i = 0; i < n; i++)
		{
		printf("%u ", gutui[i].inalt);
		printf("%u\n", gutui[i].greu);
		}*/
	fclose(f);

	i = 0;
	j = 0;
	while ( i < n){
		gr = gutui[i].greu;
		j = i; 
		while (j < n){
			if (gutui[j].greu != 0)
			{
				if (gutui[j].inalt + u < h) {
				i = j;
				//printf("%d\n", i);
				break;
								} 
				else
					{	
					if (gr < gutui[j].greu) gr = gutui[j].greu;
					j++;
					i = j;
					}
			}
			else
			j++;
			}	
		for ( j = 0; j < n; j++)
			{
			gutui[j].inalt = gutui[j].inalt + u;
			if ((gutui[j].greu == gr) && (gutui[j].inalt > h))
				gutui[j].greu = 0;	
			}
		max = max + gr;
		//printf("%d\n", max);	
		      }	
	//printf("%d\n", max);
	f = fopen("gutui.out","w");
	fprintf(f,"%d\n", max);
	fclose(f);

return 0;
}