Pagini recente » Cod sursa (job #2402280) | Cod sursa (job #598974) | Cod sursa (job #2146554) | Cod sursa (job #2286937) | Cod sursa (job #434567)
Cod sursa(job #434567)
#include <stdio.h>
#include <stdlib.h>
struct gut{
unsigned int inalt;
unsigned int greu;
};
int compare (const void * a, const void * b)
{
//return ( *(int*)a - *(int*)b );
return -((*(struct gut*)a).inalt - (*(struct gut*)b).inalt);
}
int main(){
int i, j;
FILE *f = fopen("gutui.in","r");
unsigned int n = 0,h = 0 ,u = 0, max = 0, gr;
fscanf(f, "%d", &n);
fscanf(f, "%d", &h);
fscanf(f, "%d", &u);
struct gut *gutui = (struct gut *)malloc(n * sizeof(struct gut));
for (i = 0; i < n; i++)
{
fscanf(f, "%u", &gutui[i].inalt);
fscanf(f, "%u", &gutui[i].greu);
}
qsort(gutui, n, sizeof(struct gut), compare);
/*for (i = 0; i < n; i++)
{
printf("%u ", gutui[i].inalt);
printf("%u\n", gutui[i].greu);
}*/
fclose(f);
i = 0;
j = 0;
while ( i < n){
gr = gutui[i].greu;
j = i;
while (j < n){
if (gutui[j].greu != 0)
{
if (gutui[j].inalt + u < h) {
i = j;
//printf("%d\n", i);
break;
}
else
{
if (gr < gutui[j].greu) gr = gutui[j].greu;
j++;
i = j;
}
}
else
j++;
}
for ( j = 0; j < n; j++)
{
gutui[j].inalt = gutui[j].inalt + u;
if ((gutui[j].greu == gr) && (gutui[j].inalt > h))
gutui[j].greu = 0;
}
max = max + gr;
//printf("%d\n", max);
}
//printf("%d\n", max);
f = fopen("gutui.out","w");
fprintf(f,"%d\n", max);
fclose(f);
return 0;
}