#include<stdio.h>
typedef struct gutui1
{
int g,h;
}gutui1;
void inserare(int a[20],int n,int x)
{
int i;
if(x>a[n-1])
{
a[n]=x;
}
for(i=n-1;i>=0&&x<a[i];i--)
{
a[i+1]=a[i];
}
a[i+1]=x;
}
void inserare_cu_n_constant(int a[],int n,int x)
{
int i;
for(i=1;x>a[i];i++)
{
a[i-1]=a[i];
}
a[i-1]=x;
}
int caut_max(int N,gutui1 *gutui,int H,int U,int *p)
{
int i,max=0;
for(i=0;i<N;i++)
{
if((gutui[i].h>H-U)&&(gutui[i].h<=H)&&(gutui[i].g>max))
{
max=gutui[i].g;
*p=i;
return max;//returnez prima gutuie gasita
}
}
return max;//max = 0
}
void sortare_gutui(gutui1 *gutui,int N)
{
int i,j;
gutui1 aux;
for(i=0;i<N;i++)
{
for(j=i+1;j<N;j++)
{
if(gutui[i].g<gutui[j].g)
{
aux=gutui[j];
gutui[j]=gutui[i];
gutui[i]=aux;
}
}
}
}
int comparator(const void *a,const void *b)
{
gutui1 x,y;
x=*((gutui1*)a);
y=*((gutui1*)b);
if(x.g == y.g)
{
return 0;
}
else if(x.g < y.g)
{
return 1;
}
else
{
return -1;
}
}
int main()
{
int N,H,U,i,j,x,y,totalg=0,max,*culese,index=0;
FILE * pFile = fopen("gutui.in","r");
FILE * dFile = fopen("gutui.out","w");
fscanf(pFile,"%i",&N);
fscanf(pFile,"%i",&H);
fscanf(pFile,"%i",&U);
gutui1 *gutui;
gutui=(gutui1 *)malloc(N*sizeof(gutui1));
culese=(int*)malloc(N*sizeof(gutui1));
for(i=0;i<N;i++)
{
fscanf(pFile,"%i",&gutui[i].h);
fscanf(pFile,"%i",&gutui[i].g);
}
for(i=0;i<N;i++)
{
printf("%i ",gutui[i].h);
printf("%i\n",gutui[i].g);
}
printf("\n");
//sortare_gutui(gutui,N);
qsort(gutui,N,sizeof(gutui1),comparator);
for(i=0;i<N;i++)
{
printf("%i ",gutui[i].h);
printf("%i\n",gutui[i].g);
}
while(H>0)
{
printf("Verific intre inaltimea maxima %i si inaltimea minima %i\n",H,H-U);
max=caut_max(N,gutui,H,U,&x);
inserare(culese,index,max);
printf("gutuia maxima curenta %i\n",max);
index++;
if(max)
{
gutui[x].g=0;
}
if(culese[0])
{
for(j=0;j<N;j++)
{
max=caut_max(N,gutui,H,U,&x);
if(max>culese[0])
{
printf("Inlocuiesc Gutuia cea mai mica din vector= %i cu gutuia max2= %i\n\n",culese[0],max);
gutui[x].g=0;
inserare_cu_n_constant(culese,index,max);
}
else
{
break;
}
}
}
H=H-U;
/*for(y=0;y<N;y++)
{
printf("%i ",gutui[y].h);
printf("%i\n",gutui[y].g);
}*/
}
for(i=0;i<index;i++)
{
totalg=totalg+culese[i];
}
printf("total=%i",totalg);
fprintf(dFile,"%i\n",totalg);
fclose(pFile);
fclose(dFile);
return 0;
}