Pagini recente » Cod sursa (job #518375) | Cod sursa (job #1449603) | Cod sursa (job #1864953) | Cod sursa (job #2761589) | Cod sursa (job #435403)
Cod sursa(job #435403)
#include<stdio.h>
#include<stdlib.h>
#define N 100000
FILE *fin, *fout;
unsigned long int n,h,u;
unsigned long int hg[N], g[N];
int alegere(int pas)
{
unsigned long int maxh=0,maxg=0;
int i,ales=0;
for(i=0;i<n;i++)
if( maxh < hg[i] && (hg[i] + (pas * u) <=h ))
maxh=hg[i];
for(i=0;i<n;i++)
{ if( maxh == hg[i] && maxg< g[i] )
{
maxg=g[i];
ales=i;
}
}
return ales;
}
int haccesibil(int pas)
{
int i;
for(i=0;i<n;i++)
if( hg[i] + (pas * u) <= h ) return 1;
return 0;
}
int main(void) {
fin = fopen("gutui.in", "r");
fout = fopen("gutui.out", "w");
int i,j;
fscanf(fin, "%lu %lu %lu", &n, &h, &u);
printf("%lu %lu %lu\n \n",n,h,u);
int niv=(int) (h / u) + 1;
unsigned long int level[niv][niv];
int k,h;
int dimens[niv];
for(i=0;i<niv;i++)
dimens[i]=0;
for (i = 0; i < n; i++) {
fscanf(fin, "%lu %lu", &hg[i], &g[i]);
h=(int) (hg[i]/u) ;
level[h][dimens[h]++] = g[i];
printf("%lu %lu \n", hg[i], g[i]);
}
for(i=0;i<niv;i++)
{
printf("nivelul %d ",i);
for(j=0;j<dimens[i];j++)
printf("%lu ",level[i][j]);
printf("\n");
}
printf("\n \n");
int ales,pas=0;
unsigned long int suma=0;
while(haccesibil(pas))
{
ales=alegere(pas);
pas++;
suma=suma+g[ales];
hg[ales]=h+u;
}
fprintf(fout,"%lu\n",suma);
fclose(fin);
fclose(fout);
return 0;
}