Pagini recente » Cod sursa (job #1343664) | Rating yet useless (colaps) | Cod sursa (job #2938396) | Cod sursa (job #2036110) | Cod sursa (job #434484)
Cod sursa(job #434484)
#include "stdio.h"
int h,u;
typedef struct {
int h,g;
} gutui;
int cmp(void* a, void* b)
{
int x = (((gutui*)b)->h)/u - (((gutui*)a)->h)/u;
return (x?x:(((gutui*)b)->g - ((gutui*)a)->g));
}
int cmp2(void* a, void* b)
{
return ((((gutui*)b)->g - ((gutui*)a)->g));
}
int main()
{
FILE *f, *g;
f = fopen("gutui.in", "r");
g = fopen("gutui.out", "w");
int n,i;
fscanf(f, "%i %i %i", &n,&h,&u);
gutui a[n];
gutui b[(h/u)*(h/u+1)/2];
for (i=0;i<n;i++)
fscanf(f, "%i %i", &a[i].h, &a[i].g);
qsort(a, n, sizeof(gutui), cmp);
/*for (i=0;i<n;i++)
printf("%i %i\n", a[i].h, a[i].g);*/
int m=0, //pozitia in b
j=0, //numarul de gutui din grupul curent
k=1, //numarul grupului curent
l=0; //valoarea cu care il initializez pe j
i=0;
while(i<n)
{
if (a[i].h > h-k*u && j<k)
{
//printf("a");
b[m++]=a[i];
i++;
j++;
}
else if (a[i].h <= h-k*u)
{
if (j<k)
{
//printf("c");
l-=k-j;
j=l;
k++;
}
else
{
//printf("d");
k++;
j=l;
}
}
else if (j>=k)
{
//printf("b");
i++;
}
}
/*printf("\n");
for (i=0;i<m;i++)
printf("%i %i\n", b[i].h, b[i].g);*/
qsort(b, m, sizeof(gutui), cmp2);
int tot=0;
for (j=0;j<((h/u<m)?h/u:m);j++)
tot+=b[j].g;
fprintf(g, "%i", tot);
close(f);
close(g);
return 0;
}