Cod sursa(job #437265)

Utilizator mihaela_29Vilceanu Mihaela mihaela_29 Data 9 aprilie 2010 15:45:42
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.89 kb
#include <stdio.h>
#include <stdlib.h>
int max1(int v[],int gr[],int n){
    int i,j,max;
    if (n==0) return -1;
    max=0;
    for(i=0;i<n;i++)
    if (gr[v[i]]>max) {max=gr[v[i]];
                      j=v[i];
                      }
    return j;
}
/*int max2(int v[],int n){
    int i,max;
    max=0;
    for(i=0;i<n;i++)
    if (v[i]>max) max=v[i];
    return max;
}*/
int rem(int in[],int gr[],int n,int x){
    int i,j;
    for(i=0;i<n;i++)
    if(in[i]==x){
    for(j=i;j<n-1;j++){
    in[j]=in[j+1];
    gr[j]=gr[j+1];
}
    n=n-1;
}
    return n;
}
int main(){
    int i,n,h,u,x,m,s,pos;
    int *in, *gr,*v;
    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));
    v=(int*)malloc(n*sizeof(int));
    
    for(i=0;i<n;i++){
    fscanf(f,"%d%d",&in[i],&gr[i]);

}
 x=h;
 s=0;

    while((h>=0)&&(x>=0)){
              
               m=0;
               for(i=0;i<n;i++)
               if((in[i]>x-u) &&(in[i]<=x)) {v[m]=i;
                                           m++;
                                        }
               
               pos=max1(v,gr,m);
               if (pos>=0){
               //printf("%d\n", max(v,gr,m));
             // printf("%d\n",pos);
             printf("in=%d gr=%d\n",in[pos],gr[pos]);
               s=s+gr[pos];
               h=h-u;
               x=h;
               n=rem(in,gr,n,in[pos]);
              // printf("%d\n",n);
               }
               else {x=x-u;
                    continue;
                    }
               
           
               
               }
    fprintf(g,"%d",s);
 /*  for(i=0; i<n;i++){
    fprintf(g,"%d %d", *(in+i),*(gr+i));
    fprintf(g,"\n");
}*/
    
    fclose(f);
    fclose(g);
    getchar();
    return 0;
}