Pagini recente » Cod sursa (job #1213666) | Cod sursa (job #1735646) | Cod sursa (job #812536) | Cod sursa (job #2734075) | Cod sursa (job #443802)
Cod sursa(job #443802)
//VASILACHE RAZVAN ANDREI 335 CB TEMA 1 PA PROB 2 - "GUTUI"
#include <stdio.h>
#include <stdlib.h>
#define MAX 100001
//n,h,u - le citim din fisierul de intrare. g_out - greutatea maxima a gutuilor pe care le poate culege
//suma elementelor din v_rez reprezinta greutatea ceruta.
//ind_v_rez este indicele acestui vector, care se actualizeaza cand gasesc o solutie valida
unsigned int n,h,u,g_out=0,v_rez[MAX],ind_v_rez=0;
//folosim structura "gut", gut[i] retinand inaltimea si greutatea gutuii "i"
struct gutuie {
unsigned int inaltime,greutate;
};
struct gutuie * gut;
struct gutuie aux[MAX];
//functie cu ajutorul careia folosim qsort pt a sorta descrescator vectorul de gutui dupa inaltime
int functie_qsort(const void* a,const void* b) {
gutuie x,y;
x=*((gutuie*)a);
y=*((gutuie*)b);
if(x.inaltime>y.inaltime) return -1;
else return 1;
}
//functie cu ajutorul careia calculam g_out - greutatea maxima pe care o poate culege gigel
void afla_g_out() {
unsigned int ind_aux=0,minim,i,j;
for(i=0;i<n;i++)
if(gut[i].inaltime <= h) {
v_rez[ind_v_rez++]=gut[i].greutate;
aux[ind_aux].greutate=gut[i].greutate;
if(h<u) h=0;
else h=h-u;
ind_aux++;
}
else {
minim=0;
for (j=1;j<ind_aux;j++) {
if (aux[j].greutate < aux[minim].greutate)
minim=j;
}
if (gut[i].greutate>aux[minim].greutate) {
v_rez[ind_v_rez++]=gut[i].greutate - aux[minim].greutate;
aux[minim].greutate = gut[i].greutate;
}
}
for(i=0;i<=ind_v_rez;i++)
g_out=g_out+v_rez[i];
}
int main() {
unsigned int i;
FILE * fis1;
fis1=fopen("gutui.in","r");
FILE * fis2;
fis2=fopen("gutui.out","w");
//citim numarul de gutui(n), inaltimea maxima la care ajunge gigel(h) si cu cat se ridica copacul(u)
fscanf(fis1,"%i %i %i\n",&n,&h,&u);
//alocam memorie pentru "gut"
gut=(struct gutuie*)malloc(n*sizeof(struct gutuie));
//citim pentru fiecare gutuie inaltimea si greutatea sa
for(i=0;i<n;i++)
fscanf(fis1,"%i %i\n",&gut[i].inaltime,&gut[i].greutate);
//sortam descrescator vectorul de gutui dupa inaltime
qsort(gut,n,sizeof(gutuie),functie_qsort);
//calculam greutatea ceruta
afla_g_out();
//apoi o afisam in fisierul de iesire
fprintf(fis2,"%i",g_out);
return 0;
}