Pagini recente » Cod sursa (job #629694) | Cod sursa (job #2905862) | Cod sursa (job #437227)
Cod sursa(job #437227)
#include<stdio.h>
#include<stdlib.h>
typedef struct fruct{
unsigned int ht;
unsigned int wt;
unsigned int niv;
} fruct;
int compare ( const void * a, const void * b){
fruct f1, f2;
f1 = *(fruct*)a;
f2 = *(fruct*)b;
return f2.wt-f1.wt;
}
/*int search (int v[], int start,int end){
int mij= (start+end)/2;
if ( v[mij]==0 )
return mij;
}*/
int main (){
FILE * fin = fopen ( "gutui.in", "r");
FILE * fout = fopen ( "gutui.out", "w");
long n, u, h;
int i;
fruct vec[100002];
fscanf( fin, "%ld", &n);
fscanf( fin, "%ld", &h);
fscanf( fin, "%ld", &u);
int min=0;
for ( i=0; i<n; i++ ){
fscanf (fin, "%d%d", &vec[i].ht, &vec[i].wt);
vec[i].niv=(h-vec[i].ht)/u+1;
if (vec[i].niv<min)
min = vec[i].niv;
}
i=0;
unsigned int prada = 0;
int j;
qsort(vec, n, sizeof(fruct), compare);
int m;
m = h/u;
//printf("%d\n",m);
int level[m+2];
for (i=1; i<m+1; i++)
level[i] = -1;
for (i=0; i<n; i++){
if (vec[i].ht<h){
if ( level[vec[i].niv]==-1 )
level[vec[i].niv]=i;
else{
for (j=1; j<vec[i].niv; j++)
if ( level[j]==-1 )
break;
//printf("**%d\n", j);
if (j<vec[i].niv)
level[j]=i;
}
}
}
for (i=1; i<m+1; i++)
if (level[i]!=-1){
//printf("%d ", vec[level[i]].wt);
prada = prada + vec[level[i]].wt;
}
//printf("\n");
//printf("%d\n",prada);
/*for (i=0; i<n; i++)
printf("%d %d %d\n",vec[i].ht, vec[i].wt, vec[i].niv);*/
fprintf (fout,"%d\n", prada);
fclose ( fin );
fclose ( fout );
return 0;
}