Pagini recente » Cod sursa (job #196114) | Cod sursa (job #2046960) | Cod sursa (job #236812) | Cod sursa (job #254833) | Cod sursa (job #1258583)
#include <stdio.h>
#include <algorithm>
#include <queue>
using namespace std;
struct gutui
{
int w, h;
};
bool gsortCond(gutui g1, gutui g2)
{
if (g1.h == g2.h)
return g1.w > g2.w;
else
return g1.h > g2.h;
}
void readData(const char *fileName, gutui **gParam, int *N, int *H, int *U)
{
FILE *file = NULL;
gutui *g = NULL;;
int i;
file = fopen(fileName, "r");
fscanf(file, "%i%i%i", N, H, U);
g = new gutui[*N];
for (i=0; i<*N; ++i)
{
fscanf(file, "%i%i", &g[i].h, &g[i].w);
if (g[i].h <= *H)
g[i].h = (*H-g[i].h)/(*U);
else
{
--i; --(*N);
}
}
fclose(file);
sort(g, g+*N, gsortCond);
*gParam = g;
}
void writeData(const char *fileName, const long long w)
{
FILE *file = NULL;
file = fopen(fileName, "w");
fprintf(file, "%lli", w);
fclose(file);
}
void gSolve(gutui *g, int N, int H, int U, long long *w)
{
int i, j;
priority_queue<int> Q;
for (i=g[0].h, *w=j=0; i>=0; --i)
{
for (; g[j].h==i && j<N; ++j)
Q.push(g[j].w);
if (Q.empty()) continue;
*w+=Q.top();
Q.pop();
}
}
int main()
{
gutui *g = NULL;
int H, U, N;
long long w;
readData("gutui.in", &g, &N, &H, &U);
gSolve(g, N, H, U, &w);
writeData("gutui.out", w);
return 0;
}