Cod sursa(job #436347)

Utilizator codrin989Codrin Ciubotariu codrin989 Data 8 aprilie 2010 15:16:08
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.43 kb
#include<stdio.h>
#include<stdlib.h>

unsigned long n;
double h,u,g=0;
double p[100000][2];
FILE*f;

void citire(void)
{
     unsigned long i;
     f=fopen("gutui.in","r");
     fscanf(f,"%u%lf%lf",&n,&h,&u);
     for(i=0;i<n;i++)
      fscanf(f,"%lf%lf",&p[i][0],&p[i][1]);
     fclose(f);
}

void afisare(void)
{
     unsigned long i;
     printf("%u %.0f %.0f\n",n,h,u);
     for(i=0;i<n;i++)
      printf("%.0f %.0f\n",p[i][0],p[i][1]);
}

int ajung()
{
    unsigned long i;
    for(i=0;i<n;i++)
     if(h>=p[i][0]) 
      {//printf("gasesc\n");
      return 1;}
    //printf("nu gasesc\n");
    return 0;
}

void culeg()
{
     double cmg=0,aux=h;
     unsigned long pozitie=-1,i;
     do
     {
            aux-=u;
            for(i=0;i<n;i++)
             if(aux<=p[i][0]&&p[i][0]<=h&&p[i][1]>cmg)
             {
                                              cmg=p[i][1];
                                              pozitie=i;
             }
     }while(!cmg);
     h-=u;
     p[pozitie][1]=0;
     //printf("culeg pe %u\n",pozitie);
     //printf("pot ajunge la inaltimea %f\n",h);
     g+=cmg;
}

void la_cules(void)
{
     while(ajung()==1)
                  culeg();
} 

int main(void)
{
    citire();
    afisare();
    la_cules();
    //printf("am cules %f kg.\n",g);
    f=fopen("gutui.out","w");
    fprintf(f,"%.0f",g);
    fclose(f);
    //getchar();
    return 0;
}