Cod sursa(job #423955)

Utilizator sdnxptVasiliu Radu sdnxpt Data 24 martie 2010 14:32:29
Problema Gutui Scor 0
Compilator cpp Status done
Runda teme_upb Marime 1.17 kb
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>

using namespace std;

int u;

class Gutuie{
    public:
        int inaltime, greutate;
};

bool operator<(Gutuie a, Gutuie b){
    if( a.inaltime / u < b.inaltime / u )
        return false;
    else{
        if( a.inaltime / u == b.inaltime / u ) {
            if( a.greutate < b.greutate )
                return false;
            else
                return true;
        }
        else
            return true;
    }
}


int main(){
    int n, hmax;
    FILE * fin = fopen( "gutui.in", "r" );
    fscanf( fin, "%d %d %d", &n, &hmax, &u );
    int i;
    vector<Gutuie> v(n);
    for(i = 0; i < n; i++)
        fscanf(fin, "%d %d", &v[i].inaltime, &v[i].greutate);
    sort( v.begin(), v.end() );
    for(i = 0; i < n; i++)
        printf("%d %d\n", v[i].inaltime, v[i].greutate);

    i = 0;
    while( v[i].inaltime > hmax )
        i++;
    int niv = v[i].inaltime / u;
    int gmax = v[i].greutate;
    for(i = 1; i < n; i ++)
        if( v[i].inaltime / u < niv ){
            gmax += v[i].greutate;
            niv = v[i].inaltime / u;
        }
    printf("%d\n", gmax);
    fclose(fin);
    return 0;
}