Pagini recente » Cod sursa (job #2464945) | Cod sursa (job #1278117) | Cod sursa (job #541885) | Cod sursa (job #676069) | Cod sursa (job #441436)
Cod sursa(job #441436)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
typedef struct {
unsigned long int h,g;
} gutui;
int compare(const void *a,const void *b)
{
return ((*(gutui *)b).h-(*(gutui *)a).h);
}
int min(long v[],int n,int* index)
{
int min=v[0],i=1;
*index=0;
for(; i<n; i++)
if(v[i]<min)
{
min=v[i];
*index=i;
}
return min;
}
int main(int argc, char *argv[])
{
unsigned long int n, hmax, u,i,j,s, sum=0, k=0, minim;
int index;
FILE* f = fopen("gutui.in", "r");
fscanf(f,"%lu", &n);
fscanf(f,"%lu", &hmax);
fscanf(f,"%lu", &u);
gutui a[100000], candidat;
long rez[100000],t;
for (i=0;i<n;i++)
fscanf(f,"%lu %lu", &a[i].h, &a[i].g);
qsort(a,n,sizeof(gutui),compare);
for (i=0; i<n; i++)
{
candidat=a[i];
if(candidat.h <= hmax)
{
rez[k]=candidat.g;
hmax-=u;
k++;
}
else
if(k>0)
{
// for(t=0;t<k;t++)
// printf("%i ",rez[t]);
minim = min(rez,k,&index);
if(minim < candidat.g)
rez[index]=candidat.g;
//printf("index = %i\n",index);
}
}
for(s=0; s<k; s++)
sum+=rez[s];
printf("suma: %lu", sum);
FILE* g=fopen("gutui.out", "w");
fprintf(g,"%lu",sum);
fclose(f);
fclose(g);
//getch();
return 0;
}