Pagini recente » Cod sursa (job #2788398) | Cod sursa (job #1985762) | Cod sursa (job #2784208) | Cod sursa (job #2537541) | Cod sursa (job #440813)
Cod sursa(job #440813)
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int n=0;
typedef struct{
int a;
int b;
}gut;
int compare(const void *x, const void *y){
return ((gut *)x)->b - ((gut *)y)->b;
}
int main ()
{
int i,u,h;
FILE *f1, *f2;
gut * gutui;
f1=fopen("gutui.in","r");
f2=fopen("gutui.out", "w");
fscanf(f1,"%d",&n);
fscanf(f1,"%d",&h);
fscanf(f1,"%d",&u);
gutui = ( gut *)malloc( n* sizeof( gut));
for(i=0;i<n;i++){
fscanf(f1,"%d",&(gutui[i].a));
fscanf(f1,"%d", &(gutui[i].b));
}
int s=0;
/*
for(i=0;i<n;i++)
printf("%d %d \n",gutui[i].a, gutui[i].b);
printf("---------------------\n");*/
qsort( gutui, n, sizeof(gut),compare);
/*for(i=0;i<n;i++)
printf("%d %d \n",gutui[i].a, gutui[i].b);*/
int max=0;
for(i=0;i<n;i++)
if((h-gutui[i].a)/u >max ) max= (h-gutui[i].a)/u;
//max=k;
//printf("min%d ", max);
int *tmp;
tmp= (int*)calloc((max+1), sizeof(int));
for(i=n-1;i>=0;i--){
if(gutui[i].a<=h){
if(tmp[(h-gutui[i].a)/u]==0)
tmp[(h-gutui[i].a)/u]=gutui[i].b; /*printf("%ld ", a[i]);*/
else
{
int poz =(h-gutui[i].a)/u -1;
while(poz>=0 && tmp[poz]!=0){
poz--;
}
if(poz>=0) tmp[poz] =gutui[i].b;
}
}
}
for(i=0;i<max+1;i++)
s=s+tmp[i];
fprintf(f2,"%d",s);
fclose(f1);fclose(f2);
return 0;
}