Pagini recente » Cod sursa (job #2149688) | Cod sursa (job #1303458) | Cod sursa (job #1899331) | Profil teodoracristina | Cod sursa (job #441034)
Cod sursa(job #441034)
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <map>
using namespace std;
typedef struct gutui {
int height;
int weight;
int pasi;
} Gutui;
int compare(const void *a, const void *b) {
Gutui* ob1 = (Gutui*) a;
Gutui* ob2 = (Gutui*) b;
if (ob1->pasi != ob2->pasi) {
if (ob1->pasi < ob2->pasi) return -1;
else return 1;
}
if (ob1->pasi == ob2->pasi) {
if (ob1->weight < ob2->weight) return 1;
else return -1;
}
return 0;
}
int main()
{
int N, H, U;
int i, greutate = 0;
FILE *f, *g;
Gutui v[100];
multimap <int, int> culese;
multimap <int,int>::iterator it;
f = fopen("gutui.in", "r");
g = fopen("gutui.out", "w");
fscanf(f, "%d %d %d", &N, &H, &U);
for (i=0; i<N; i++)
{
fscanf(f, "\n%d %d", &v[i].height, &v[i].weight);
}
for (i=0; i<N; i++)
{
v[i].pasi = (H - v[i].height)/U + 1;
}
qsort(v, N, sizeof(Gutui), compare);
/*for (i=0; i<N; i++)
{
printf("%d %d\n",v[i].pasi,v[i].weight);
}
printf("\n");*/
greutate = 0;
int k=0;
//int nr = v[0].pasi;
for (i=0; i<N; i++)
{
if (v[i].pasi - k > 0)
{
culese.insert(pair<int,int>(v[i].weight,0));
k++;
greutate += v[i].weight;
}
else if(culese.size()>0)
{
if (v[i].weight > (culese.begin())->first)
{
greutate -= (culese.begin())->first;
culese.erase(culese.begin());
greutate += v[i].weight;
culese.insert(pair<int,int>(v[i].weight,0));
}
}
}
/*printf("\n");
for ( it=culese.begin() ; it != culese.end(); it++ )
printf(" %d", it->first);
printf("Greutatea este %d", greutate);
getchar();*/
fprintf(g,"%d",greutate);
fclose(f);
fclose(g);
return 0;
}