Pagini recente » Cod sursa (job #2803523) | Cod sursa (job #790137) | Cod sursa (job #428149) | Cod sursa (job #607756) | Cod sursa (job #434642)
Cod sursa(job #434642)
#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;
}