Pagini recente » Cod sursa (job #429978) | Cod sursa (job #439598) | Cod sursa (job #433451) | Cod sursa (job #434315)
Cod sursa(job #434315)
#include <stdio.h>
#include <stdlib.h>
int calcul(int c[][3],int n,int h,int u,int gr){
int i,min=c[0][0],max=0,ok=1;
for(i=0;i<n;i++)
if (c[i][2]==0) ok=0;
if(ok==1)
return gr;
for(i=0;i<n;i++)
if(c[i][0]<min&&c[i][0]>0&&c[i][2]==0)
min=c[i][0];
//printf("minim %d \n",min);
int imax=0;
for(i=0;i<n;i++)
if(c[i][0]>max&&c[i][0]<h&&c[i][2]==0) {
max=c[i][0];
imax=i;}
//printf("maxim %d \n",max);
int m=0;
if(max/u==min/u) {
for(i=0;i<n;i++)
if(c[i][1]>m&&c[i][0]<h&&c[i][2]==0) {
m=c[i][1];
imax=i;
}
//printf("ALEGEREA ESTE %d de pe poz %d\n",c[imax][1],imax);
gr=gr+m;
return gr;
}
int j=0,maxim=0;
for(i=0;i<n;i++)
if((max/u)*u<=c[i][0]&&c[i][0]<(max/u+1)*u)
if (maxim<c[i][1]&&c[i][2]==0) {
maxim=c[i][1];
j=i;
}
//printf("pe nivel maxim %d pe poz %d\n",maxim,j);
int k=0,q=0;
for(i=0;i<n;i++)
if((((max/u)-1)*u)<=c[i][0]&&c[i][0]<((max/u)*u))
if (c[i][1]>c[j][1]&&c[i][2]==0) {
k++;
q=i;
}
//printf("pe nivel penultim a gasit %d\n",k);
for(i=0;i<n;i++)
c[i][0]=c[i][0]+u;
if(k>=2) {
gr=gr+c[q][1];
c[q][2]=1;
c[j][2]=1;
// printf("ALEGEREA ESTE %d\n",c[q][1]);
}
else
{
gr=gr+c[j][1];
// printf("ALEGEREA ESTE %d\n",c[j][1]);
c[j][2]=1;
}
return calcul(c,n,h,u,gr);
}
int main(){
int c[100000][3];
int i,n,h,u,gr=0;
freopen("gutui.in", "r", stdin);
freopen("gutui.out", "w", stdout);
scanf("%d",&n);
scanf("%d",&h);
scanf("%d",&u);
for (i=0;i<n;i++) {
scanf("%d",&c[i][0]);
scanf("%d",&c[i][1]);
c[i][2]=0;
}
printf("a");
gr=calcul(c,n,h,u,0);
printf("%d",gr);
return 0;
}