Pagini recente » Cod sursa (job #3170684) | Cod sursa (job #1172500) | Cod sursa (job #3243290) | Cod sursa (job #2007322) | Cod sursa (job #435911)
Cod sursa(job #435911)
/*
* File: Problema2.c
* Author: Bosilca Adrian 325CC
*
*/
#include <stdio.h>
#include <stdlib.h>
int u;
typedef struct gutuie{
int h;
int g;
}gutuie;
void afisare(gutuie v[], int n) {
int i;
for (i = 0 ; i < n ; i++) {
printf("%d %d %d\n", v[i].g, v[i].h, i*10);
}
printf("\n");
}
int comp1(const void* a, const void* b) {
gutuie *c = (gutuie*)a;
gutuie *d = (gutuie*)b;
if ((c->h-1/u) == (d->h-1/u))
return (d->g - c->g);
return ( d->h - c->h );
}
int comp2(const void* a, const void* b) {
gutuie *c = (gutuie*)a;
gutuie *d = (gutuie*)b;
if ((c->g) == (d->g))
return (d->h - c->h);
return ( d->g - c->g );
}
int main() {
FILE* f = fopen("gutui.in", "r");
int n, h, i, j, dif = 0, k = 0, s1 = 0, s2 = 0;
gutuie v[100000], aux;
fscanf(f, "%d %d %d", &n, &h, &u); //citirea datelor de intrare
for (i = 0 ; i < n ; i++) {
fscanf(f, "%d %d", &v[i].h, &v[i].g);
}
fclose(f);
qsort(v, n, sizeof(gutuie), comp1);
dif = 0;
for (i = 0 ; i < n; i++) {
if (v[i].h+dif <= h) {
s1 += v[i].g;
dif += u;
}
}
qsort(v, n, sizeof(gutuie), comp2);
dif = 0;
for (i = 0 ; i < n; i++) {
if (v[i].h+dif <= h) {
s2 += v[i].g;
dif += u;
}
}
f = fopen("gutui.out", "w");
if (s1 <= s2)
fprintf(f, "%d", s2);
else
fprintf(f, "%d", s1);
fclose(f);
return 0;
}