Cod sursa(job #440230)

Utilizator mihaela_29Vilceanu Mihaela mihaela_29 Data 11 aprilie 2010 23:04:25
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 2.64 kb
#include <stdio.h>
#include <stdlib.h>

int *in, *gr;
/*int compare (const void * a, const void * b)
{
 return - ( *(int*)a - *(int*)b );
  //return  -( (*(gutui*)a).greutate - (*(gutui*)b).greutate );
}*/
void sort(int n){
  int i,j,aux;
  for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  if (in[i]>in[j]){
                   aux=in[i];
                   in[i]=in[j];
                   in[j]=aux;
                   aux=gr[i];
                   gr[i]=gr[j];
                   gr[j]=aux;
                   }
     }
  int remel(int n,int elmax){
      int j;
      
      for(j=elmax;j<n-1;j++){
         in[j]=in[j+1];
         gr[j]=gr[j+1];
         }
      n--;
           return n;    
               }
int rem( int n,int h){
    int i,j;
    i=0;
    while(i<n){
    if (in[i]>h) {
    
       for(j=i;j<n-1;j++){
       in[j]=in[j+1];
       gr[j]=gr[j+1];
       }
       n--;
       }
    else i++;
}
    return n;
       }
int maxim(int m, int u,int n, int *elmax){
    int i,max=0;
    for(i=0;i<n;i++)
    if ((gr[i]>max)&&(in[i]>m-u)) {max=gr[i];
                                  elmax=i;
                                  }
    return max;
}
int main(){
    
    int i,n,h,u,s,x,m,max,elmax;
    //int j;
    FILE *f=fopen("gutui.in","r");
    FILE *g=fopen("gutui.out","w");
    
    fscanf(f,"%d%d%d",&n,&h,&u);
    in=(int*)malloc(n*sizeof(int));
    gr=(int*)malloc(n*sizeof(int));

   
     for(i=0;i<n;i++)
                     fscanf(f,"%d%d",&in[i],&gr[i]);
                    
    sort(n);
   /*  for(i=0;i<n;i++)
                       printf("%d ", in[i]);
                       printf("\n");
                       for(i=0;i<n;i++)
                       printf("%d ", gr[i]);
                       printf("\n");*/
    s=0;
    i=0;
    while(n!=0){
                if(n==rem(n,h)){
                       m=in[0];
                       elmax=0;
                       max=maxim(m,u,n,&elmax);
                       printf("%d %d\n",m,max);
                       s=s+max;
                       n=remel(n,elmax);
                    /*  for(i=0;i<n;i++)
                       printf("%d ", in[i]);
                       printf("\n");
                       for(i=0;i<n;i++)
                       printf("%d ", gr[i]);
                       printf("\n");*/
                       h=h-u;
    //printf("i=%d h=%d s=%d\n",i,h,s);
    
                        i++;
                        }
               else {n=rem(n,h);
                    i=0;
                    }
}
    fprintf(g,"%d",s); 
    fclose(f);
    fclose(g);              
   getchar();
    return 0;
}