Cod sursa(job #440979)

Utilizator daniel.tabacaruTabacaru Daniel daniel.tabacaru Data 12 aprilie 2010 18:28:01
Problema Gutui Scor 0
Compilator cpp Status done
Runda teme_upb Marime 2.2 kb
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <map> 

using namespace std;

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];
    
    multimap <int, int> culese;
    multimap<int,int>::iterator it;
    
    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)
           {    
               culese.insert(pair<int,int>(v[i].weight,0));
               k++;  
               greutate += v[i].weight;  
           }
        else
        {
           if (v[i].weight > (culese.begin())->first)
              {
                 greutate -= (culese.begin())->first;
                 culese.erase(culese.begin());
                 greutate += v[i].weight;
                 culese.insert(pair<int,int>(v[i].weight,0));
              }
           }    
    }  
    //printf("\n");
    //for ( it=culese.begin() ; it != culese.end(); it++ )
    //printf(" %d", it->first);
        
        
        //printf("Greutatea este %d", greutate);
    
    //getchar();
    fclose(f);
    fclose(g);
    return 0;
}