Cod sursa(job #468010)

Utilizator simona.poilincaSimona Poilinca simona.poilinca Data 1 iulie 2010 21:00:35
Problema Gutui Scor 10
Compilator cpp Status done
Runda teme_upb Marime 1.55 kb
#include <stdio.h>
#include <unistd.h>

void quickSort(int *v,int *w, int stanga, int dreapta) {
      int i = stanga, j = dreapta;
      int tmp;
      int pi = v[(stanga + dreapta) / 2];
      int pg = w[(stanga + dreapta) / 2];
      while (i <= j) {
            while ( (v[i]<pi) || ( (v[i]==pi)&&(w[i]>pg) ) )
		{	
			if (v[i]<pi) i++;
			if ((v[i]==pi)&&(w[i]>pg)) i++;
		}
            while ((v[j]>pi) || ( (v[j]==pi)&&(w[j]<pg) ) )
                  {
			if (v[j]>pi) j--;
			if ((v[j]==pi)&&(w[j]<pg)) j--;
		}
            if (i <= j) {
                  tmp = v[i];v[i] = v[j];v[j] = tmp;
		  tmp = w[i];w[i] = w[j];w[j] = tmp;
                  i++;j--;
            }
      };
      if (stanga < j)
            quickSort(v,w, stanga, j);
      if (i < dreapta)
            quickSort(v,w, i, dreapta);
}

int pickG_1(int *i,int *g,int n)
{
int h=0,recolta=0,k=0;

h=1;

while (h<=i[n-1])
{
	if (h<=i[k]) 
		{
			recolta+= g[k]; k++; h++;
		}
	else k++;
}

return recolta;
}

int main()
{
int n,h,hmax,*inaltime,*greutate;//,*valoare;
FILE *fp;

//Citire Date

if ((fp=fopen("gutui.in","r"))==NULL) return 1;
fscanf(fp,"%d %d %d",&n,&hmax,&h);

inaltime = new int[n];
greutate = new int[n];
//valoare = new int[n];

for (int i=0;i<n;i++){
  int temp1,temp2;
  fscanf(fp,"%d %d",&temp1,&temp2);
  greutate[i]=temp2;
  inaltime[i]=(hmax-temp1)/h +1 ;
//  valoare[i]=1;
  }
fclose(fp);

quickSort(inaltime,greutate,0,n-1);
n=pickG_1(inaltime,greutate,n);

fp = fopen("gutui.out","w");
fprintf(fp,"%d",n);
fclose(fp);

delete inaltime;
delete greutate;

return 0;
}