Pagini recente » Istoria paginii runda/oni-11-12 | Cod sursa (job #2147959) | Cod sursa (job #2120805) | Istoria paginii runda/oni20101112etc | Cod sursa (job #440982)
Cod sursa(job #440982)
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int h;
int g;
}gutui;
int compareG(const void *a, const void *b)
{
gutui *aa = (gutui *)a;
gutui *bb = (gutui *)b;
return (bb->g -aa->g);
}
int compareH(const void *a, const void *b)
{
gutui *aa = (gutui *)a;
gutui *bb = (gutui *)b;
return (bb->h -aa->h);
}
int maxim(int v[],int n,int u)
{
int max=0,i;
for(i=0;i<n;i++)
if(v[i]>max)
max=v[i];
return max;
}
int main()
{
FILE *fis=fopen("gutui.in","r");
FILE *fis_out=fopen("gutui.out","w");
int n,h_max,u,i,j,aux=0,greutate=0,count=0;
fscanf(fis,"%i",&n);
gutui a[n];
fscanf(fis,"%i",&h_max);
fscanf(fis,"%i",&u);
for(i = 0; i < n; i++)
fscanf(fis, "%i %i", &a[i].h,&a[i].g);
qsort(a,n,sizeof(gutui),compareG); //gutui sortate descrescator dupa greutate
int test[n];
for(i=0;i<n;i++)
test[i]=1 +(h_max-a[i].h)/u; //nr de gutui pe care le pot culege pana cand nu mai pot lua gutuia resp
int index_max=maxim(test,n,u);
printf("Indexul max este:%i\n",index_max);
for(i=0;i<index_max;i++)
qsort(a,index_max,sizeof(gutui),compareH); //sortez primele index_max gutui dupa inaltime
for(i=0;i<index_max;i++)
if(a[i].h<=h_max)
{
greutate+=a[i].g;
h_max=h_max-u;
count++;
}
if(count<n) //mai am gutui de cules
{
for(i=index_max;i<n;i++)
if(a[i].h<=h_max)
{ greutate+=a[i].g;
h_max=h_max-u;
}
}
/* printf("Greutate max: %i\n",greutate);
for(i=0;i<n;i++)
printf("%i - %i \n",a[i].h,a[i].g);*/
fprintf(fis_out,"%i",greutate);
// getch();
return 0;
}