Pagini recente » Cod sursa (job #1810012) | Cod sursa (job #1527464) | Cod sursa (job #3189644) | Cod sursa (job #1856352) | Cod sursa (job #430445)
Cod sursa(job #430445)
#include <stdio.h>
#include <stdlib.h>
int *hh,*gg,*pus;
int n,h,u,crt;
void quicksort(int *prim,int *sec,int st, int dr)
{
int i,j;
int v,t;
if ( dr>st )
{
v=prim[dr]; i=st-1; j=dr; /*indice=ultimul element */
for ( ; ; )
{
while ( prim[++i]<v );
while ( prim[--j]>v );
if (i>=j) break;
t=prim[i];prim[i]=prim[j];prim[j]=t;
t=sec[i];sec[i]=sec[j];sec[j]=t;
}
t=prim[i];prim[i]=prim[dr];prim[dr]=t;
t=sec[i];sec[i]=sec[dr];sec[dr]=t;
quicksort(prim,sec,st,i-1);
quicksort(prim,sec,i+1,dr);
}
}
int maxim(int pasi)
{
int ok=0,max=-1,poz=-1,i;
for (i=crt;i>=0;i--)
if (!pus[i] && (hh[i]+u*pasi)<=h)
{
ok=1;
if (hh[i]+u*(pasi+1)<=h) break;
else
if (gg[i]>max) {max=gg[i];poz=i;}
}
if (!ok) return -1;
if (poz==-1) poz=i;
crt=i;
pus[poz]=1;
printf("Aleg gg=%d\n",gg[poz]);
return gg[poz];
}
int main()
{
int i;
FILE *fis=fopen("gutui.in","r");
fscanf(fis,"%d%d%d",&n,&h,&u);
hh=(int*)malloc(n*sizeof(int));
gg=(int*)malloc(n*sizeof(int));
pus=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
{fscanf(fis,"%d%d",&hh[i],&gg[i]);pus[i]=0;}
fclose(fis);
quicksort(hh,gg,0,n-1);
int pasi=0;
int gr=0;
int tmp;
crt=n-1;
while(1)
{
tmp=maxim(pasi);
if (tmp<0) break;
gr+=tmp;
pasi++;
}
FILE *fis1=fopen("gutui.out","w");
fprintf(fis1,"%d\n",gr);
printf("Suma totala=%d\n",gr);
fclose(fis1);
return 0;
}