Cod sursa(job #435898)

Utilizator ion.morozanMorozan Ion ion.morozan Data 7 aprilie 2010 22:41:24
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 4.9 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

typedef struct furcte{
    uint32_t  inaltime;
    uint32_t  greutate;
}fructe;

uint32_t sort_by_inaltime( const void *a, const void *b ){
    fructe *ia = ( fructe * )a;
    fructe *ib = ( fructe * )b;

    return (uint32_t)( ib->inaltime - ia->inaltime );
	/*  returns negative if b > a
            and positive if a > b. */
}

uint32_t sort_by_greutate( const void *a, const void *b ){
    fructe *ia = ( fructe * )a;
    fructe *ib = ( fructe * )b;

    return (uint32_t)( ib->greutate - ia->greutate );
        /*  returns negative if b > a
            and positive if a > b. */
}

int main(){
    FILE * f = fopen( "gutui.in", "r" );
    FILE * g = fopen( "gutui.out", "w" );
    uint32_t N,H,U,i, masa = 0,m1=0,m2=0,m3=0,m4=0,m5=0,m6=0,m7=0,m8=0,m9=0,m10=0;
    uint32_t h1=100,h2=100,h3=100,h4=100,h5=100,h6=100,h7=100,h8=100,h9=100,h10=100;
    fructe x[100000];

     if ( f == NULL )                                       /* eroare la deschiderea fisierului */
         perror ("Error opening file");
    else{
         fscanf(f, "%u%u%u", &N, &H, &U  );                 /* nr de gutui, inaltimea maxima, cu cat creste distanta */
         
         int q = 0;
         for ( i = 0; i < N; i++){                           /* citirea elementelor structurii => greutatea si inaltimea unde se afla o gutuie */
             fscanf(f, "%u%u", &x[i].inaltime, &x[i].greutate );
             if ( (x[i].inaltime>=91 && x[i].inaltime<=100) && m10 <= x[i].greutate){
                 if ( h10 >= x[i].inaltime )
                     m10 += x[i].greutate;
                 else
                     m10 = x[i].greutate;
                     h10 = x[i].inaltime;
             }
             if ( (x[i].inaltime>=81 && x[i].inaltime<=90) && m9 <= x[i].greutate){
                 if ( h9 >= x[i].inaltime )
                     m9 += x[i].greutate;
                 else
                     m9 = x[i].greutate;
                     h9 = x[i].inaltime;
             }
             if ( (x[i].inaltime>=71 && x[i].inaltime<=80) && m8 <= x[i].greutate){
                 if ( h8 >= x[i].inaltime )
                     m8 += x[i].greutate;
                 else
                     m8 = x[i].greutate;
                     h8 = x[i].inaltime;
             }
             if ( (x[i].inaltime>=61 && x[i].inaltime<=70) && m7 <= x[i].greutate){
                 if ( h7 >= x[i].inaltime )
                     m7 += x[i].greutate;
                 else
                     m7 = x[i].greutate;
                     h7 = x[i].inaltime;
             }
             if ( (x[i].inaltime>=51 && x[i].inaltime<=60) && m6 <= x[i].greutate){
                 if ( h6 >= x[i].inaltime )
                     m6 += x[i].greutate;
                 else
                     m6 = x[i].greutate;
                     h6 = x[i].inaltime;
             }
             if ( (x[i].inaltime>=41 && x[i].inaltime<=50) && m5 <= x[i].greutate){
                 if ( h5 >= x[i].inaltime )
                     m5 += x[i].greutate;
                 else
                     m5 = x[i].greutate;
                     h5 = x[i].inaltime;
             }
             if ( (x[i].inaltime>=31 && x[i].inaltime<=40) && m4 <= x[i].greutate){
                 if ( h4 >= x[i].inaltime )
                     m4 += x[i].greutate;
                 else
                     m4 = x[i].greutate;
                     h4 = x[i].inaltime;
             }
             if ( (x[i].inaltime>=21 && x[i].inaltime<=30) && m3 <= x[i].greutate){
                 if ( h3 >= x[i].inaltime )
                     m3 += x[i].greutate;
                 else
                     m3 = x[i].greutate;
                     h3 = x[i].inaltime;
             }
             if ( (x[i].inaltime>=11 && x[i].inaltime<=20) && m2 <= x[i].greutate){
                 if ( h2 >= x[i].inaltime )
                     m2 += x[i].greutate;
                 else
                     m2 = x[i].greutate;
                     h2 = x[i].inaltime;
             }
             if ( (x[i].inaltime>=0  && x[i].inaltime<=10) && m1 <= x[i].greutate){
                 if ( h1 >= x[i].inaltime )
                     m1 += x[i].greutate;
                 else
                     m1 = x[i].greutate;
                     h10 = x[i].inaltime;
             }
                
         }
        // qsort(x, N, sizeof(fructe), sort_by_inaltime);     /* sortez descrescator dupa inaltime */
         /* qsort(x, N, sizeof(fructe), sort_by_greutate);

         for ( i = 0; i < N; i++)
             printf("%u %u\n", x[i].inaltime, x[i].greutate); */
         
        /* i = 0;
         int k = 0;
         while ( i < N ){
             if ( (x[i].inaltime + k*U) <= H ){
                 masa += x[i].greutate;
                 k++;
             }
             i++;
         }*/
         masa = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10;
         fprintf(g, "%u", masa);

    }

    fclose(f);
    fclose(g);
    return 0;
}