Pagini recente » Cod sursa (job #1422195) | Cod sursa (job #2822953) | Cod sursa (job #1450495) | Cod sursa (job #784308) | Cod sursa (job #435437)
Cod sursa(job #435437)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct height_weight_fruit {
int height;
int weight;
} fruit;
bool compare_fruits (fruit f1, fruit f2) {
if (f1.height == f2.height)
return (f1.weight > f2.weight);
return (f1.height > f2.height);
}
int main() {
FILE *in, *out;
in = fopen ("gutui.in", "r");
out = fopen ("gutui.out", "w");
int n, h, u;
fruit *quince;
fscanf (in, "%d %d %d", &n, &h, &u);
quince = (fruit *)calloc(n, sizeof(fruit));
for (int i=0; i<n; i++) {
fscanf (in, "%d %d", &(quince[i].height), &(quince[i].weight));
}
vector<fruit> fruits (quince, quince+n);
vector<fruit>::iterator it;
sort (fruits.begin(), fruits.end(), compare_fruits);
//for (it = fruits.begin (); it != fruits.end(); it++){
// printf ("%d %d \n", (*it).height, (*it).weight);
//}
int sum=0;
//int rest = h%u + 1;
it=fruits.begin();
while (it != fruits.end() && h>=0) {
int max = (*it).weight;
//int crit = ((*it).height - rest) /u;
it ++;
while (it != fruits.end() && (*it).height > h-u ) {
if ((*it).weight > max) {
max= (*it).weight;
}
it ++;
}
//printf(">>>%d\n", max);
sum += max;
h -= u;
}
fprintf(out, "%d", sum);
//printf("%d", sum);
fclose (in); fclose (out);
return 0;
}