Pagini recente » Cod sursa (job #2657482) | Cod sursa (job #2029439) | Cod sursa (job #2454032) | Cod sursa (job #1748153) | Cod sursa (job #440979)
Cod sursa(job #440979)
#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, j, 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, "%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 ",v[i].pasi);
}
printf("\n");
for (i=0; i<N; i++)
{
printf("%d ",v[i].weight);
}
// greutate = v[0].weight;
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 (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();
fclose(f);
fclose(g);
return 0;
}