Cod sursa(job #440148)

Utilizator cg1700Catalin Geosu cg1700 Data 11 aprilie 2010 22:19:56
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.97 kb
#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("c:\\gutui.in","r");
    g=fopen("c:\\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;
   /*printf("%d ",v_suma[i-1]);
   printf("%d ",v_h[i-1]);  */
     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]){
         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;
}