Pagini recente » Borderou de evaluare (job #133075) | Cod sursa (job #402737) | Cod sursa (job #3266493) | Cod sursa (job #2951501) | Cod sursa (job #443010)
Cod sursa(job #443010)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int n,h,u;
typedef struct
{
int lvl;
int g;
} gutuie;
gutuie *a;
int condsort (const void * x, const void * y)
{
gutuie *a= (gutuie *) x;
gutuie *b= (gutuie *) y;
if (a->lvl < b->lvl) return -1;
else if(a->lvl > b->lvl) return 1;
else if( a->g > b->g) return -1;
else return 1;
}
int main()
{
FILE *f;
int i,ha,niv,j, lvlmax=0,s=0,counter, elem, k,valid,rem=0, o=0;
int **lista ; //vector de pointeri
f= fopen("gutui.in", "r");
fscanf (f, "%i %i %i",&n,&h,&u);
a = (gutuie*)malloc(n*sizeof(gutuie));
for(i=0;i<n;i++)
{
fscanf (f, "%i %i",&ha,&a[i].g);
a[i].lvl= (h - ha)/ u ;
if ( ha > h ) { i--; n--; }
if ( a[i].lvl >= lvlmax ) lvlmax=a[i].lvl+1;
}
fclose(f);
qsort (a, n, sizeof(gutuie), condsort);
lista= (int **)malloc(lvlmax*sizeof(int *));
niv=0; j=0;
for (i=0;i<n && niv<lvlmax ;i++)
if(niv == a[i].lvl )
{ lista[niv][j]= (int ) malloc(1*sizeof(int)); lista[niv][j]=a[i].g; j++;}
else
{
lista[niv][j]= (int ) malloc(1*sizeof(int));
lista[niv][j]=-1;
j=0;
i--;
niv++;
}
/*
for (i=0,k=0; i<lvlmax;)
{
if(lista[i][k] >= 0)
printf("%i ",lista[i][k++]);
else { i++; k=0; printf("\n");}
} */
f=fopen("gutui.out", "w");
j=lvlmax;
niv=0;
/*elem=lista[niv][0];
while(j!=1)
{
counter=0;
valid=1;
for(k=0,i=niv+1;i<lvlmax;)
{
if(elem < lista[i][k++] )
{
counter++;
if(counter > i-niv+rem) { o=0; niv++; rem++; valid=0; elem=lista[niv][0]; break; }
}
else { i++; k=0; }
}
if (valid)
{
s+=elem; j--; fprintf(f,"%i ",elem);
if(rem) { rem--; elem=lista[niv][++o]; }
else { niv++; o=0; elem=lista[niv][0]; }
}
} */
/*
fprintf(f,"%i\n\n",elem);
s+=elem;
for (i=0,k=0; i<lvlmax;)
{
if(lista[i][k] >= 0)
fprintf(f,"%i ",lista[i][k++]);
else { i++; k=0; fprintf(f,"\n");}
}
fprintf(f,"%i",s); */
fclose(f);
free(a);
free(lista);
getch();
return 0;
}