Pagini recente » Cod sursa (job #441550) | Cod sursa (job #831209) | Cod sursa (job #1849609) | Cod sursa (job #2226019) | Cod sursa (job #436830)
Cod sursa(job #436830)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void adauga_in_vector(int* vector, int size, int val) {
int i, aux;
for (i = 0; i < size; i++) {
if (val >= vector[i]) {
aux = vector[i];
vector[i] = val;
val = aux;
}
}
}
int suma_elem_vector(int* vec, int size) {
int i, rez = 0;
for (i = 0; i < size; i++) {
rez += vec[i];
}
return rez;
}
int main() {
FILE *fin = fopen("gutui.in", "r");
FILE *fout = fopen("gutui.out", "w");
int nr, h_max, U, i, j, inaltime, greutate, nr_level, *rez, care_level;
fscanf(fin, "%d", &nr);
fscanf(fin, "%d", &h_max);
fscanf(fin, "%d", &U);
nr_level = h_max / U;
if (h_max % U != 0) {
nr_level++;
}
char* alegeri_pe_nivel = (char*) calloc(h_max / U, sizeof(char)),
*mem_aloc = (char*) calloc(nr_level, sizeof(char));
for (i = 0; i < nr_level; i++) {
alegeri_pe_nivel[i] = nr_level - i;
}
rez = (int*) calloc(nr_level, sizeof(int));
int** Nivel = (int**) calloc(nr_level, sizeof(int*));
for (i = 1; i <= nr; i++) {
fscanf(fin, "%d", &inaltime);
fscanf(fin, "%d", &greutate);
care_level = inaltime / U;
if (inaltime % U == 0) {
care_level -= 1;
}
if (mem_aloc[care_level] == 0) {
Nivel[care_level] = (int*) calloc(alegeri_pe_nivel[care_level], sizeof(int));
mem_aloc[care_level] = 1;
}
adauga_in_vector(Nivel[care_level], alegeri_pe_nivel[care_level],
greutate);
}
for (i = nr_level - 1; i >= 0; i--) {
for (j = 0; j < alegeri_pe_nivel[i]; j++) {
if (mem_aloc[i] == 0) {
break;
} else {
adauga_in_vector(rez, alegeri_pe_nivel[i], Nivel[i][j]);
}
}
}
fprintf(fout, "%d\n", suma_elem_vector(rez, nr_level));
return 0;
}