Pagini recente » Cod sursa (job #2127848) | Cod sursa (job #1996100) | Cod sursa (job #922614) | Cod sursa (job #2196159) | Cod sursa (job #426387)
Cod sursa(job #426387)
#include <stdio.h>
#include <stdlib.h>
typedef struct gutuie{
int g;
int inalt;
int luata;
}gutuie;
void afisare(gutuie a[],int n,int h){
int i;
for (i=0;i<n;i++)
if ((a[i].luata==0)&&(a[i].inalt<=h))
printf("%d %d\n",a[i].inalt,a[i].g);
}
int main(){
FILE *f=fopen("gutui.in","rt");
FILE *out=fopen("gutui.out","wt");
int n,h,u;
int i,j,max=0,temp=0,interval,poz,nr=0;
gutuie v[100];
gutuie bubble;
fscanf(f,"%d %d %d",&n,&h,&u);
for (i=0;i<n;i++){
fscanf(f,"%d %d",&v[i].inalt,&v[i].g);
v[i].luata=0;
}
//sortare dupa inaltime
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (v[i].inalt<v[j].inalt){
bubble.inalt=v[i].inalt;
bubble.g=v[i].g;
v[i].inalt=v[j].inalt;
v[i].g=v[j].g;
v[j].inalt=bubble.inalt;
v[j].g=bubble.g;
}
// afisare(v,n);
while(nr<n){
for (i=0;i<n;i++)
if (( v[i].inalt<=h )&&(v[i].luata==0)){
temp=0;
interval=(h-v[i].inalt)/u;
if ((h-v[i].inalt)%u>0) interval++;
if ((interval==0)&&(v[i].inalt!=h)) interval++;
afisare(v,n,h);
printf("*%d %d %d\n",interval,v[i].inalt,i);
poz=i;
for (j=i;j<n;j++)
if ((temp<v[j].g)&&(v[j].inalt >= (h-u*interval) )&&(v[j].inalt <= h-u*(interval-1))&&(v[j].luata==0)){
temp=v[j].g;
poz=j;
}
// printf("* %d\n",temp);
// if (temp!=0){
for (j=i;j<n;j++)
v[j].inalt=v[j].inalt+u;
// }
max=max+temp;
v[poz].luata=1;
printf("temp=%d\n",temp);
break;
}
nr++;
}
fprintf(out,"%d\n",max);
return 0;
}