Pagini recente » Cod sursa (job #1770105) | Cod sursa (job #389349) | Cod sursa (job #1227220) | Cod sursa (job #546284) | Cod sursa (job #441605)
Cod sursa(job #441605)
/*
Catalina Mihai Vlad
334CB
Problema - Gutui
Complexitate O(N^2)
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
int g,h;
} gutuie;
int comp(const void *a,const void *b){
gutuie *x, *y;
x=( gutuie*)a;
y=( gutuie*)b;
return (y->h - x->h);
}
int main(void){
int N,H,U,G=0,i,j,aux,aux2;
FILE *f;
f=fopen("gutui.in","r");
fscanf(f,"%i%i%i",&N,&H,&U);
gutuie gutui[N];
int indici[N];
for(i=0;i<N;i++){
fscanf(f,"%i%i",&(gutui[i].h),&(gutui[i].g));
}
fclose(f);
printf("%3i\n",comp(gutui,gutui+1));
qsort(gutui,N,sizeof(gutuie),comp);
for(i=0;i<N;i++){
printf("gutui[%3i] %3i %3i\n",i,gutui[i].g,gutui[i].h);
}
aux=0;//aux va contoriza cate gutui au fost culese
for(i=0;i<N;i++)
if( gutui[i].h + aux * U <= H ){
// m[i] = 1;
printf("G=%3i culeg gutui[%3i]=%3i\n",G,i,gutui[i].g);
G += gutui[i].g;
indici[aux++]=i;
}
else {aux2=aux;
indici[aux]=i;
printf("\ngutuia %3i nu poate fi culeasa\naux: ",i);
for(j=0;j<aux;j++){
printf(" %3i",indici[j]);
if(gutui[indici[j]].g < gutui[indici[aux2]].g)
aux2=j;
}
if(aux2!=aux){
printf("G %3i, gutuia %3i\n",G,i);
G += gutui[indici[i]].g - gutui[indici[aux2]].g;
indici[aux2]=i;
}
}
f=fopen("gutui.out","w");
fprintf(f,"%i",G);
fclose(f);
return 0;
}