Pagini recente » Cod sursa (job #1589294) | Cod sursa (job #1254908) | Istoria paginii runda/endurance/clasament | Cod sursa (job #1233155) | Cod sursa (job #437968)
Cod sursa(job #437968)
#include <stdio.h>
#include <stdlib.h>
#include <queue>
using namespace std;
FILE *fin,*fout;
unsigned int n,h,u;
typedef struct
{
unsigned int value;
unsigned int nivel;
}cell;
int sort(const void * a, const void * b)
{
cell v1 = *((cell *)a);
cell v2 = *((cell *)b);
if(v1.nivel == v2.nivel) return -(v1.value - v2.value);
return -(v1.nivel - v2.nivel);
}
int main()
{
unsigned int i,max_nivel,sum =0;
int poz;
cell *v;//[100000];
priority_queue<int> mypq;
fin = fopen("gutui.in","r");
fscanf(fin,"%i %i %i",&n,&h,&u);
v = (cell *)malloc(n*sizeof(cell));
for(i=0; i<n; i++)
{
fscanf(fin,"%i %i",&v[i].nivel,&v[i].value);
v[i].nivel = (h - v[i].nivel)/u;
}
fclose(fin);
qsort(v,n,sizeof(cell),sort);
max_nivel = v[0].nivel;
i = 0;
for (poz = max_nivel; poz >=0; poz--)
{
while( (v[i].nivel == poz) && (i < n))
{
mypq.push(v[i].value);
i++;
}
if(!mypq.empty())
{
sum += mypq.top();
mypq.pop();
}
}
fout = fopen("gutui.out","w");
fprintf(fout,"%i",sum);
fclose(fout);
return 0;
}