Cod sursa(job #436382)

Utilizator cg1700Catalin Geosu cg1700 Data 8 aprilie 2010 15:35:38
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.66 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()                 //n nr gutui, h inaltimea maxima, u inaltime ridicare
{    FILE *f, *g;
    long int n;
    float h,u;
    float hg[100000] ,wg[100000] ,v[100000];
    float min;
    long int i;
    long int j;
    //float f1,f2;
    float maxh,maxw;
    float x;
    long int contor=0;
    float greutate=0;
    f=fopen("gutui.in","r");
    g=fopen("gutui.out","w");
    fscanf(f,"%ld",&n);
    fscanf(f,"%f",&h);
    fscanf(f,"%f",&u);
    min=h;
    x=h;
    for(i=0;i<n;i++)
     {fscanf(f,"%f",&hg[i]);
      fscanf(f,"%f",&wg[i]);
      v[i]=0;
       if(hg[i]<min) min=hg[i];}
    for(i=0;i<=(h-min)/u;i++)
        {//printf("%f\n",(h-min)/u);
      maxh=0;
      maxw=0;
      for(j=0;j<n;j++)
        {if(hg[j]<=x)
          {if((floor((h-hg[j])/u)!=floor((h-maxh)/u))&&(hg[j]>maxh)&&(v[j]!=1)) {//printf("maxhh=%.0f",maxh);
                                          maxh=hg[j];
                                          maxw=wg[j];
                                          contor=j;}
           else
             if((floor((h-hg[j])/u)==floor((h-maxh)/u))&&(abs(hg[j]-maxh)<u)&&(wg[j]>maxw)&&(v[j]!=1)) {maxh=hg[j];
                                                               maxw=wg[j];
                                                              contor=j;}
          }
         }
          v[contor]=1;
          //printf("maxh=%.0f\n",maxh);
          greutate=greutate+maxw;
          //printf("maxw=%.0f\n",maxw);
          if (maxh==min) break;
          x=x-u;
       }
         fprintf(g,"%.0f",greutate);
       fclose(f);
      fclose(g);
      return 0;
}