Pagini recente » Cod sursa (job #2004413) | Cod sursa (job #596586) | Cod sursa (job #1946858) | Cod sursa (job #451619) | Cod sursa (job #2028849)
#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;
}