Cod sursa(job #440900)

Utilizator daniel.tabacaruTabacaru Daniel daniel.tabacaru Data 12 aprilie 2010 17:27:30
Problema Gutui Scor 0
Compilator cpp Status done
Runda teme_upb Marime 2.1 kb
#include <stdio.h>
#include <stdlib.h>

typedef struct gutui {
        int height;
        int weight;
        int pasi;
} Gutui;


int compare(const void *a, const void *b) {
	Gutui* ob1 = (Gutui*) a;
	Gutui* ob2 = (Gutui*) b;
	if (ob1->pasi != ob2->pasi) {
               if (ob1->pasi < ob2->pasi) return -1;
                  else return 1;
               }
    if (ob1->pasi == ob2->pasi) {
               if (ob1->weight < ob2->weight) return 1;
                  else return -1;
               }         
	return 0;
}      

int main() 
{
    int N, H, U;
    int i, j, greutate = 0;
    FILE *f, *g;
    Gutui v[100];
    
    f = fopen("gutui.in", "r");
    g = fopen("gutui.out", "w");
    
    fscanf(f , "%d%d%d", &N, &H, &U);
    
    for (i=0; i<N; i++)
    {
        fscanf(f, "%d %d", &v[i].height, &v[i].weight);
    }  
        
    for (i=0; i<N; i++)
    {
         v[i].pasi = (H - v[i].height)/U + 1; 
    }
    
    qsort(v, N, sizeof(Gutui), compare);
    
    for (i=0; i<N; i++)
    {
         printf("%d ",v[i].pasi);
    }
    printf("\n");
    for (i=0; i<N; i++)
    {
         printf("%d ",v[i].weight);
    }
    
   // greutate = v[0].weight;
    int k=0;
    int nr = v[0].pasi;
    
    for (i=0; i<N; i++)
    {
        if (v[i].pasi - k > 0)
           {    
               if (i==0)
                  greutate += v[i].weight;
               else if (v[i].pasi != v[i-1].pasi)  
               {
                  greutate += v[i].weight;
               }
               else if (v[i].pasi == v[i-1].pasi)  
               {
                  if (nr > 0)
                  {
                     greutate += v[i].weight;
                     nr = nr + v[i+1].pasi - v[i].pasi - 1;
                  }
               }
               k++;
                     
              /* for (i=0; i<N; i++)
               {
                   v[i].pasi -= 1;
               }    */
                   
           }
    }  
    printf("greutatea max este %d", greutate);
        
        
    
    getchar();
    return 0;
}