Pagini recente » Cod sursa (job #1885968) | Borderou de evaluare (job #778045) | Cod sursa (job #2534545) | Cod sursa (job #56795) | Cod sursa (job #434493)
Cod sursa(job #434493)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
long h;
long g;
} gutui;
long u;
int compare(const void* a, const void* b)
{
long h = u;
gutui* a1 = (gutui *)a;
gutui* b1 = (gutui *)b;
long k = (a1->h)/h;
if (((a1->h) % h) == 0) k--;
long t = (b1->h)/h;
if (((b1->h) % h) == 0) t--;
// printf("%ld %ld (%ld) (%ld)\n",k, t, a1->h, b1->h);
if (k == t) return (-(a1->g) + (b1->g));
else return (t - k);
}
int main()
{
long n,h;
FILE *f = fopen("gutui.in","r");
FILE *ff = fopen("gutui.out","w");
fscanf(f,"%ld %ld %ld",&n, &h, &u);
long i;
gutui *a = (gutui *)calloc(n,sizeof(gutui));
for (i=0; i<n; i++)
fscanf(f,"%ld %ld",&a[i].h, &a[i].g);
qsort (a, n, sizeof(gutui), compare);
/*for (i=0; i<n; i++)
printf("**%ld %ld\n",a[i].h,a[i].g);
*/
long t = 0;
long g = 0;
long j;
i = 0;
for (j=0; j<n; j++)
{
//int k1 = a[j].h/u;
t = a[j].h+i*u;
if (t<=h)
{
//t=a[j].h+i*u;
//if (t>h) break;
g+=a[j].g;
i++;
//k = k1;
}
}
fprintf(ff,"%ld",g);
//printf("%d %d %d %d\n",n,h,u,a[n-1].g);
fclose(f);
fclose(ff);
return 0;
}