Pagini recente » Cod sursa (job #249841) | Cod sursa (job #1124431) | Cod sursa (job #2937983) | Cod sursa (job #2297830) | Cod sursa (job #440701)
Cod sursa(job #440701)
#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->weight > B->weight)
return -1;
else if(A->weight < B->weight)
return 1;
else
return A->size-B->size;
}
void printr(int n, int *vect)
{
int i;
for(i=0; i<n;i++)
{
printf("%i ",vect[i]);
}
printf("\n");
}
int insert(int weight,int size,int *vect)
{
if(vect[size]==0)
{
vect[size]=weight;
return weight;
}
else
{
while(size>0)
{
if(vect[size]==0)
{
vect[size]=weight;
return weight;
}
size--;
}
return 0;
}
}
int main(int argc, char **argv)
{
int H, aux, min, dif, U, 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,&H,&U);
Gutue *gut = (Gutue *) malloc(sizeof(Gutue) * n);
min=H;
dif=(H+1)%U;
for(i=0;i<n;i++)
{
fscanf(in,"%i %i",&(gut[i].size),&(gut[i].weight));
if(gut[i].size>H)
{
i--;
n--;
}
else
{
gut[i].size-=dif;
gut[i].size/=U;
if(gut[i].size<min)
min=gut[i].size;
}
}
H++;
H/=U;
//Read data
qsort(gut,n,sizeof(Gutue),rule);
vect=(int*) malloc(sizeof(int)*(H-min+1));
for(i=0; i<(H-min+1);i++)
{
vect[i]=0;
//printf("%i ",vect[i]);
}
//printf("\n");
for(i=0; i<n; i++)
{
//printf("%i ",min);
aux=insert(gut[i].weight,H-gut[i].size,vect);
printr(H-min+1,vect);
//printf("%i \n",aux);
total+=aux;
}
printr(H-min+1,vect);
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;
}