Pagini recente » Cod sursa (job #1630910) | Cod sursa (job #2872635) | Cod sursa (job #2564923) | Cod sursa (job #1262577) | Cod sursa (job #440606)
Cod sursa(job #440606)
#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;
return (B->weight)-(A->weight);
}
insert(int weight,int size,int n,int *vect)
{
if(vect[size]==0)
{
vect[size]=weight;
return weight;
}
else
{
size--;
while(size>=0)
{
if(vect[size]==0)
{
vect[size]=weight;
return weight;
}
size--;
}
return 0;
}
}
int main(int argc, char **argv)
{
int maxsize, aux, min, dif, step, n, i, total=0;
int *vect;
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);
min=maxsize;
dif=(maxsize+1)%step;
for(i=0;i<n;i++)
{
fscanf(in,"%i %i",&(gut[i].size),&(gut[i].weight));
if(gut[i].size>maxsize)
{
i--;
n--;
}
else
{
gut[i].size-=dif;
gut[i].size/=step;
if(gut[i].size<min)
min=gut[i].size;
}
}
maxsize ++;
maxsize/=step;
//Read data
qsort(gut,n,sizeof(Gutue),rule);
vect=(int*) malloc(sizeof(int)*(maxsize-min));
for(i=0; i<(maxsize-min);i++)
{
vect[i]=0;
//printf("%i ",vect[i]);
}
//printf("\n");
for(i=0; i<n; i++)
{
//printf("%i ",min);
aux=insert(gut[i].weight,(maxsize-gut[i].size)-1,maxsize-min,vect);
//printf("%i \n",aux);
total+=aux;
}
/*printf("\n");
for(i=0;i<n;i++)
{
printf("%i %i\n",gut[i].size,gut[i].weight);
}*/
fprintf(out,"%i\n",total);
//scanf("%i",&i);
fclose(in);
fclose(out);
return 0;
}