Pagini recente » Cod sursa (job #2777862) | Cod sursa (job #3231575) | Cod sursa (job #600899) | Cod sursa (job #1209160) | Cod sursa (job #468010)
Cod sursa(job #468010)
#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;
}