Cod sursa(job #435615)

Utilizator andra_serbanSerban Andra-Elena andra_serban Data 7 aprilie 2010 18:04:20
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.77 kb
#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;

}