Cod sursa(job #439164)

Utilizator cristianficeaFicea Cristian cristianficea Data 11 aprilie 2010 13:40:09
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 2.7 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int suma=0;
void sortare(int n,int *hgutuie,int *ggutuie){//sortez descresc dupa h
    int aux1,aux2,i,j;
    for (i=0;i<n-1;i++)
        for (j=i+1;j<n;j++)
            if (hgutuie[i]<hgutuie[j]){
                aux1=hgutuie[i];
                hgutuie[i]=hgutuie[j];
                hgutuie[j]=aux1;
                aux2=ggutuie[i];
                ggutuie[i]=ggutuie[j];
                ggutuie[j]=aux2;
            }
}



int max(int i, int n, int hmax, int u, int *hgutuie, int *ggutuie){
    int j=0,max=ggutuie[i];
    for (j=i;i<n;i++)
        if ((hmax-hgutuie[j])<=u)
            if(ggutuie[j]>=max)
                max=ggutuie[j];
    return max;
}

int rezolvare(int n, int hmax, int u, int *maximeh, int *maximeg){
    int i=0,j=hmax;
    while ((i<n)&&(j>0)){
          if(maximeh[i]<=j){
                           j=j-u;
                           suma+=maximeg[i];
                           }
         // if(maximeh[i]==j){
          //                  suma+=maximeg[i];
          //                  }
          i++;
    }
    return suma;
}
void maxime(int n, int hmax, int u, int *hgutuie, int *ggutuie, int *maximeh, int *maximeg){
     int i=0,j=hmax;
     for (i=0;i<n,j>0;i++,j=j-u){
         maximeh[i]=hgutuie[i];
         maximeg[i]=ggutuie[i];
     }
}

int main(){
    FILE *fin=fopen("gutui3.in","r");
    FILE *fout=fopen("gutui.out", "w");
    int n,h,u;
    fscanf(fin, "%d %d %d",&n,&h,&u);
    //verific date intrare prima linie corecte
    //printf("numarul de gutui este: %d\ninaltimea maxima este: %d\ninaltime gutuie este: %d\n",n,h,u);
    int i=0;
    int *hgutuie=malloc(n*sizeof(int));//aloc dinamic vect de inalt gutui
    int *ggutuie=malloc(n*sizeof(int));//si de greutate gutui
    int *maximeh=(int*)calloc(n,n*sizeof(int));
    int *maximeg=(int*)calloc(n,n*sizeof(int));
    for (i=0;i<n;i++)
        fscanf(fin, "%d %d",&hgutuie[i],&ggutuie[i]);//pun in 2 vectori inaltime si greut coresp gutuie
        //for(i=0;i<n;i++)
        //printf("inaltime:%d, greutate:%d\n",hgutuie[i],ggutuie[i]);//verific vectorii;
        //printf("\n\n\n\n\n");
    sortare(n,ggutuie,hgutuie);
    maxime(n,h,u,hgutuie,ggutuie,maximeh,maximeg);
    sortare(n,maximeh,maximeg);
   //for(i=0;i<n;i++)
     // printf("inaltime:%d, greutate:%d\n",maximeh[i],maximeg[i]);//verific vectorii;
   printf("%d", rezolvare(n,h,u,maximeh,maximeg));
   getch();
    //int rasp=rezolvare(0,n,h,u,hgutuie,ggutuie);
    //fprintf(fout,"%d",rasp);
    fclose(fin);
    fclose(fout);
return 0;
}