Cod sursa(job #426387)

Utilizator Emy21Filipescu Emilian Emy21 Data 26 martie 2010 20:35:44
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.52 kb
#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;
}