Cod sursa(job #434386)

Utilizator encyEnciu Bogdan ency Data 5 aprilie 2010 19:52:11
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.52 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++)
	
//

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];
	}
//printf("minim %d \n",min);
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>((h-c[j][0])/u))  { 
    	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;
}