Cod sursa(job #434642)

Utilizator veraconstVeronica Constantinoaia veraconst Data 6 aprilie 2010 12:57:33
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.13 kb
#include <stdio.h>
#include <stdlib.h>

typedef struct gut
{
	int inaltime;
	int greutate;
} gutui;

int compare (const void * a, const void * b)
{
    return ( *(int*)b - *(int*)a );
}
void inalta (gutui *a, int pozi,int pozf,int c)
{
	int i;
	for (i=pozi;i<pozf;i++)
		a[i].inaltime=a[i].inaltime+c;
	
}
void swap(gutui *x,gutui *y)
{
   gutui aux;
   aux = *x;
   *x = *y;
   *y = aux;
}

int main()
{
	FILE *f=fopen ("gutui.in","r");
	FILE *g=fopen ("gutui.out","w");
	
	gutui *a;
	int n,h,u,i;
	fscanf(f,"%d %d %d",&n,&h,&u);
	a=(gutui*)malloc(n*sizeof(gutui));
	for (i=0;i<n;i++)
		fscanf(f,"%d %d",&a[i].inaltime,&a[i].greutate);
	qsort(a,n,sizeof(gutui),compare);
	int sortat=1;
	while (sortat)
	{
		sortat=0;
		for (i=0;i<n-1;i++)
			if ((a[i].inaltime==a[i+1].inaltime)&&(a[i].greutate<a[i+1].greutate))
			{	
				swap(&a[i],&a[i+1]);
				sortat=1;
			}
	}
	
	i=0;
	int gmax=0;
	while (i<n)
	{
		if (a[i].inaltime<h)
		{
			gmax=gmax+a[i].greutate;
		        inalta(a,i+1,n,u);
		}
		i++;
	}	
	fprintf (g,"%d\n",gmax);	
	/*for (i=0;i<n;i++)
		printf("%d %d\n",a[i].inaltime,a[i].greutate);*/
	
	

	free(a);
	fclose(f);
	fclose(g);

	return 0;
}