Pagini recente » Cod sursa (job #2085118) | Cod sursa (job #2746914) | Cod sursa (job #2198869) | Cod sursa (job #1010283) | Cod sursa (job #440084)
Cod sursa(job #440084)
#include <stdio.h>
#include <stdlib.h>
typedef struct gutui
{
int size;
int weight;
}Gutue;
int rule(const void * a, const void *b)
{
Gutue * A = (Gutue *) a;
Gutue * B = (Gutue *) b;
if(A->size > B->size)
return -1;
else if(A->size < B->size)
return 1;
else
return B->weight-A->weight;
}
int main(int argc, char **argv)
{
int maxsize, dif, aux, step, n, i, total=0;
int rest=0;
FILE * in = fopen("gutui.in","rt");
FILE * out = fopen("gutui.out","wt");
//Read data
fscanf(in,"%i %i %i",&n,&maxsize,&step);
Gutue *gut = (Gutue *) malloc(sizeof(Gutue) * n);
dif=maxsize%step;
maxsize/=step;
for(i=0;i<n;i++)
{
fscanf(in,"%i %i",&(gut[i].size),&(gut[i].weight));
gut[i].size-=dif;
gut[i].size/=step;
}
//Read data
qsort(gut,n,sizeof(Gutue),rule);
for(i=0;i<n;i++)
{
printf("%i %i\n",gut[i].size,gut[i].weight);
}
for(i=0;i<n;i++)
{//eliminates "gutuis" that can't be reached
if(gut[i].size<=maxsize)
break;
}
for(;i<n;i++)
{
rest+=maxsize-gut[i].size;
aux=gut[i].size;
while(gut[i].size==aux && rest>0 && i<n)
{
total+=gut[i].weight;
i++;
rest--;
}
if(rest==0)
while(gut[i].size==aux && i<n)
i++;
i--;
maxsize=aux;
}
fprintf(out,"%i\n",total);
scanf("%i",&i);
fclose(in);
fclose(out);
return 0;
}