Cod sursa(job #434690)

Utilizator sdascaluStefan Dascalu sdascalu Data 6 aprilie 2010 13:51:01
Problema Gutui Scor 10
Compilator cpp Status done
Runda teme_upb Marime 1.39 kb
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int compare(const void *a, const void *b)
{
    if(*(int*)a>=*(int*)b)
       return -1;
    else
       return 1;
}
typedef struct{
        int g,h;
}gutui;
int main()
{
    FILE *f;
    gutui a[10000];
    int n,h,u;
    f=fopen("gutui.in","r");
    if(f!=NULL)
    {
               fscanf(f,"%i %i %i",&n,&h,&u);
               for(int i=0;i<n;i++)
                       fscanf(f,"%i %i",&a[i].h,&a[i].g);
               fclose(f);
    }
    printf("\nU este:%i",u);
    printf("\nMatricea initiala este:");
    for(int i=0;i<n;i++)
    {
       printf("\n");
       printf("%i %i",a[i].h,a[i].g);
    }
    qsort(a,n,sizeof(gutui),compare);
    printf("\nColectia sortata:");
    for(int i=0;i<n;i++)
    {
       printf("\n");
       printf("%i %i",a[i].h,a[i].g);
    }
    int max=0,h_curenta[10000],marcaje[10000];
    for(int i=0;i<10000;i++)
            marcaje[i]=0;
    for(int i=0;i<n;i++)
    {
         //h_curenta+=a[i].h;
         marcaje[i]+=a[i].h;
         printf("h_curenta:%i\n",marcaje[i]);
         if(marcaje[i-1]>h)
         {
               marcaje[i-1]=0;
               continue;
         }
         else
         {
             max+=a[i].g;
             marcaje[i+1]+=u;
         }
    }
    f=fopen("gutui.out","w");
    fprintf(f,"%i",max);
    fclose(f);
    //getch();
}