Pagini recente » Cod sursa (job #1981783) | Cod sursa (job #3296100) | Cod sursa (job #1891020) | Cod sursa (job #781265) | Cod sursa (job #440238)
Cod sursa(job #440238)
#include <stdio.h>
#include <algorithm>
#include <list>
#include <vector>
#include <map>
using namespace std;
#define getLevel(Gutuie, H, U) ((H-Gutuie.h)/U)
struct gutuie{
long int h,g;
};
map<long int, list<gutuie> > Gutui;
vector<long int> arbore;
long int greutate(long int nrNiv){
long int i, sum=0;
for(i = nrNiv-1;i>-1;i--){
if(!Gutui[i].empty()){
list<gutuie>::iterator it;
for(it = (Gutui[i]).begin(); it != (Gutui[i]).end(); it++){
arbore.push_back((*it).g);
push_heap(arbore.begin(), arbore.end());
}
}
if(!arbore.empty()){
pop_heap(arbore.begin(),arbore.end());
sum +=arbore.back();
arbore.pop_back();
}
}
return sum;
}
int main(){
long int N,H,U,nrNiv,i;
gutuie Gutuie;
FILE *f=fopen("gutui.in","r"), *g=fopen("gutui.out","w");
fscanf(f,"%li %li %li\n",&N,&H,&U);
nrNiv = H/U;
for(i=0;i<N;i++){
fscanf(f, "%li %li\n", &(Gutuie.h), &(Gutuie.g));
if(Gutuie.h <= H && Gutuie.h >= 0)
Gutui[getLevel(Gutuie,H,U)].push_front(Gutuie);
}/*
for(i=0;i<nrNiv;i++){
fprintf(g, "\n%i.",i);
list<gutuie>::iterator it;
for(it = (Gutui[i]).begin(); it != (Gutui[i]).end(); it++)
fprintf(g,"%i %i|", (*it).h, (*it).g);
}*/
fprintf(g,"%li", greutate(nrNiv));
fclose(f);
fclose(g);
return 0;
}