Cod sursa(job #439979)

Utilizator cg1700Catalin Geosu cg1700 Data 11 aprilie 2010 21:12:04
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.79 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;
    long int j;
    long int x;
    uint32_t aux;
    uint32_t maxh,maxw;
    long int contor=0;
    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);
     for(i=0;i<n;i++)
     {fscanf(f,"%d",&hg[i]);
      fscanf(f,"%d",&wg[i]);
      if(max<wg[i]) max=wg[i];
       v[i]=0;}

for (i=n;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;
                     }

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++) {
  if(hg[i]<=h){
   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("x=%d ",x);*/}
          printf("min=%d ",min);
         if(min<wg[i]){
         v[x]=1;
            v_suma[i]=v_suma[i-1]+wg[i]-min;
              }

        else  v_suma[i]=v_suma[i-1]+wg[i];
        }

}
  if(v_h[i-1]>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-1]);
       fclose(f);
      fclose(g);
          //   system("PAUSE");
      return 0;
}