Pagini recente » Cod sursa (job #1332233) | Cod sursa (job #1401612) | Cod sursa (job #1087120) | Cod sursa (job #153002) | Cod sursa (job #440165)
Cod sursa(job #440165)
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main() //n nr gutui, h inaltimea maxima, u inaltime ridicare
{ FILE *f, *g;
long int n;
uint32_t h,u;
uint32_t hg[100000] ,wg[100000],v_suma[100000],v_h[100000],v[100000];
long int i=0;
long int j;
long int x=0;
int ok;
uint32_t aux;
uint32_t min,max=0;
f=fopen("gutui.in","r");
g=fopen("gutui.out","w");
fscanf(f,"%ld",&n);
fscanf(f,"%d",&h);
fscanf(f,"%d",&u);
while(i<n)
{// printf("%d %d ",i,hg[i]);
fscanf(f,"%d",&hg[i]);
fscanf(f,"%d",&wg[i]);
if(hg[i]>h){wg[i]=0;
i--;
n--;
}
i++;}
for(i=0;i<n;i++)
printf("%d ",hg[i]);
for (i=n-1;i>=0;i--){
for(j=1;j<=i;j++)
if(hg[j-1]<hg[j]){
aux=hg[j-1];
hg[j-1]=hg[j];
hg[j]=aux;
aux=wg[j-1];
wg[j-1]=wg[j];
wg[j]=aux;
}
if(max<wg[n-i-1]) max=wg[n-i-1];
v[n-i]=0;
}
for(i=0;i<n;i++)
{
printf("%d ",hg[i]);
printf("%d ",wg[i]);
printf("\n");}
v_suma[0]=wg[0];
v_h[0]=h-u;
for(i=1;i<=n;i++) {
ok=0;
if(hg[i]<=v_h[i-1])
v_suma[i]=v_suma[i-1]+wg[i];
else
{min=max;
for(j=0;j<i;j++)
if(v[j]==0)
if(min>wg[j]){min=wg[j];
x=j;}
// printf("min=%d ",min);
if((min<wg[i])&&((h-hg[i])/u<=(h-hg[x])/u)) {
v[x]=1;
v_suma[i]=v_suma[i-1]+wg[i]-min;
}
else {v[i]=1;
v_suma[i]=v_suma[i-1];
}
ok=1;
}
if((v_h[i-1]>0)&&(ok==0))
v_h[i]=v_h[i-1]-u;
else v_h[i]=v_h[i-1];
}
/*for(i=0;i<n;i++)
printf(" %d ",v[i]);*/
fprintf(g,"%d",v_suma[n]);
fclose(f);
fclose(g);
// system("PAUSE");
return 0;
}