Pagini recente » Cod sursa (job #2259031) | Cod sursa (job #41498) | Cod sursa (job #2934861) | Cod sursa (job #2264941) | Cod sursa (job #434917)
Cod sursa(job #434917)
#include <stdio.h>
#include <stdlib.h>
//#include <conio.h>
//using namespace std;
int n,h,u;
typedef struct {
unsigned int height;
unsigned int weight;
unsigned int clas;
}gutuie;
gutuie *vect;
int my_compare(const void *a,const void *b){
gutuie *unu=(gutuie *) a;
gutuie *doi=(gutuie *) b;
if(unu->clas==doi->clas) return (doi->weight-unu->weight);
else return (unu->clas-doi->clas);
}
int main(){
// char s[20];
int i,j,max_dif=0,depl=0,k=0,schimb=0;
int *solutie;
FILE *fin=fopen("gutui.in","r");
FILE *fout=fopen("gutui.out","w");
fscanf(fin,"%d",&n);
fgetc(fin);
fscanf(fin,"%d",&h);
fgetc(fin);
fscanf(fin,"%d",&u);
//respect restrictile
if(n<1||n>10000)
return 1;
vect=(gutuie *)malloc(n*sizeof(gutuie));
for(i=0;i<n;i++){
fgetc(fin);
fscanf(fin,"%d",&vect[i].height);
fgetc(fin);
fscanf(fin,"%d",&vect[i].weight);
vect[i].clas=(h-vect[i].height)/u+1;
if(vect[i].clas>max_dif)
max_dif=vect[i].clas;
}
solutie=(int *)calloc(max_dif,sizeof(int));
qsort(vect,n,sizeof(gutuie),my_compare);
/*
for(i=0;i<n;i++)
printf("\n%d %d %d ",vect[i].height,vect[i].weight,vect[i].clas);
*/
int g=0;
k=1;
/*for( i = 0 ;i < n; i++,k++ )
if(vect[i].clas==k){
*/
i=0;
while(i<n){
solutie[depl++]=vect[i].weight;
// printf("%d %d %d", vect[i].weight,vect[i].clas,i);
// getch();
schimb=0;
for(g=i+1;vect[g].clas==k;g++)
for(j=0;j<depl&&schimb<vect[i].clas;j++)
if(solutie[j]<vect[g].weight) {
solutie[j]=vect[g].weight;
schimb++;
}
i=g;
k++;
}
int sum=0;
for(i=0;i<depl;i++)
sum+=solutie[i];
fprintf(fout,"%d",sum);
// getch();
return 0;
}