Pagini recente » Cod sursa (job #88654) | Cod sursa (job #2514154) | Cod sursa (job #2512642) | Cod sursa (job #1084973) | Cod sursa (job #435615)
Cod sursa(job #435615)
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
int n;
int N;
int H;
int U;
int inaltime[100000];
int greutate[100000];
/* Functia sorteaza descrescator un vector */
void sort() {
int i, j, aux, aux2;
for (i = 1; i <= N - 1; i++)
for (j = i + 1; j <= N; j++)
if (inaltime[i] < inaltime[j]) {
aux = inaltime[i];
inaltime[i] = inaltime[j];
inaltime[j] = aux;
aux2 = greutate[i];
greutate[i] = greutate[j];
greutate[j] = aux2;
}
}
/* Functia citeste din fisierul gutui.in datele de intrare */
void read() {
FILE * f = fopen("gutui.in", "r");
int i;
fscanf(f, "%d", &N);
fscanf(f, "%d", &H);
fscanf(f, "%d", &U);
for (i = 1; i <= N; i++) {
fscanf(f, "%d", &inaltime[i]);
fscanf(f, "%d", &greutate[i]);
}
}
/* Functia scrie in fisierul gutui.out datele de iesire */
void write(long int x) {
FILE * g = fopen("gutui.out", "w");
fprintf(g, "%d", x);
}
/* Functia calculeaza maximul dintre 2 numere a si b */
int max( int a, int b) {
return (a > b) ? (a) : (b);
}
int gutui() {
int max_sum, sum, i, nr;
int max_elem = INT_MIN;
max_sum = sum = 0;
nr = 0;
for (i = 1; i <= N; i++) { // se parcurge secventa de numere intregi;
inaltime[i] = inaltime[i] + U * nr;
if(inaltime[i] <= H) {
sum = max(0, sum + greutate[i]); // se considera primul
max_sum = max(max_sum, sum);
nr = nr + 1;
}
// max_sum = max(max_sum, sum);
}
return max_sum;
}
int main() {
int suma;
read();
sort();
suma = gutui();
write(suma);
return 0;
}