Pagini recente » Cod sursa (job #3176642) | Cod sursa (job #177272) | Cod sursa (job #833431) | Cod sursa (job #2035241) | Cod sursa (job #2032552)
#include <iostream>
#include <fstream>
#define DMAX 100010
using namespace std;
ifstream in("lupu.in");
ofstream out("lupu.out");
struct element{
long lg;
long lana;
}arrey[DMAX];
int N;
long 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(){
long maxim;
int pozMin;
bool ok;
do{
maxim = -1;
pozMin = -1;
ok = false;
for(int i = 1; i <= N; i++){
if(!marcat[i] && (arrey[i].lg <= M) && (arrey[i].lg > M - K) && maxim < arrey[i].lana){
ok = true;
maxim = arrey[i].lana;
pozMin = i;
}
}
if(!ok){
long distDeparte = -1;
for(int i = 1; i <= N; i++){
if(!marcat[i] && arrey[i].lg > distDeparte && (arrey[i].lg <= M)){
maxim = arrey[i].lana;
distDeparte = arrey[i].lg;
pozMin = i;
}
}
}
if(pozMin != -1){
suma += maxim;
M -= K;
marcat[pozMin] = true;
}
}while(pozMin != -1);
out << suma;
}
int main(){
citire();
rezolvare();
return 0;
}