Cod sursa(job #2028849)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 28 septembrie 2017 19:08:49
Problema Lupul Urias si Rau Scor 16
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <climits>
#define  DMAX  100010

using namespace std;

ifstream in("lupu.in");
ofstream out("lupu.out");

struct element{
    long lg;
    long lana;
}arrey[DMAX];

int N, M, K;//date de intrare
long long suma;
bool marcat[DMAX];

void citire(){
    in >> N >> M >> K;
    for(int i = 1; i<= N; i++){
        in >> arrey[i].lg >> arrey[i].lana;
    }
}

void rezolvare(){
    int departare = 0;
    long maxim;
    int pozMin;
    bool ok = false;
    do{
        maxim = -1;
        pozMin = -1;
        ok = false;
        for(int i = 1; i <= N; i++){
            if(marcat[i] == false && maxim < arrey[i].lana && (arrey[i].lg + departare <= M) && (arrey[i].lg + departare + K > M)){
                ok = true;
                maxim = arrey[i].lana;
                pozMin = i;
            }
        }
        if(ok == false){
            for(int i = 1; i <= N; i++){
                if(marcat[i] == false && maxim < arrey[i].lana && (arrey[i].lg + departare <= M)){
                    maxim = arrey[i].lana;
                    pozMin = i;
                }
            }
        }
        if(pozMin != -1){
            suma += maxim;
            departare += K;
            marcat[pozMin] = true;
        }
    }while(pozMin != -1);



    out << suma;
}

int main(){
    citire();
    rezolvare();
    return 0;
}