Cod sursa(job #434346)

Utilizator encyEnciu Bogdan ency Data 5 aprilie 2010 17:59:35
Problema Gutui Scor 20
Compilator c Status done
Runda teme_upb Marime 1.5 kb
#include <stdio.h>
#include <stdlib.h>
int calcul(int c[][3],int n,int h,int u,int gr){
int i,min=10000000,max=0,ok=1;
//for(i=0;i<n;i++)
//	if(c[i][2]!=1)
	//printf("gutuia %d inal %d greut %d status %d\n",i,c[i][0],c[i][1],c[i][2]);
//for(i=0;i<n;i++)
	
//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;}
	if(c[i][0]<min&&c[i][0]>0&&c[i][2]==0)
		min=c[i][0];
	}
if (min>h) return gr;
//printf("maxim %d \n",max);
int m=0;
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;
	}
	gr=calcul(c,n,h,u,0);
	printf("%d",gr);
	return 0;
}