Cod sursa(job #659409)

Utilizator s8ko14romario s8ko14 Data 10 ianuarie 2012 16:57:37
Problema Gutui Scor 10
Compilator cpp Status done
Runda teme_upb Marime 1.56 kb
#include<stdio.h>
int a[100000][2],n,U;

int ridicare(int n,int U)
{
	int i;
	for(i=0;i<n;i++)
		if(a[i][0]>=0)
			a[i][0]=a[i][0]+U;
}

int main()
{
	FILE *f=fopen("gutui.in","rt");
	FILE *g=fopen("gutui.out","wt");
	int n,in_max,U,gr_max=0,i,j,max=0,var,cont=0,ok=0;
	fscanf(f,"%i%i%i",&n,&in_max,&U);
	for(i=0;i<n;i++)
		for(j=0;j<2;j++)
			fscanf(f,"%i",&a[i][j]);
	while(2)
	{
		ok=0;
		max=0;
		for(i=0;i<n;i++)
			if(a[i][0]>in_max-U && a[i][0]<=in_max)//ma asigur ca la urmatoarea crestere sa nu se duca prea sus && sa nu fie de pe acum prea sus gutuia
				if(a[i][1]>max)//daca am mai multe gutui care la urmatoarea crestere cresc peste masura o aleg pe cea mai grea
				{	
					max=a[i][1];
					var=i;
				}
		if(max!=0)//daca am gasit vreo gutuie care creste la utmatoarea crestere peste masura
		{
			gr_max=gr_max+a[var][1];
			a[var][0]=-1;a[var][1]=-1;
			ridicare(n,U);
		}
		else
		{
			for(i=0;i<n;i++)
				if(a[i][1]>max  && a[i][0]<=in_max)
				{
					max=a[i][1];
					var=i;
				}
				else
					if(a[i][1]==max && a[i][0]>a[var][0] && a[i][0]<=in_max)
					{
						max=a[i][1];
						var=i;
					}
			gr_max=gr_max+a[var][1];
			a[var][0]=-1;a[var][1]=-1;
			ridicare(n,U);
		}
		cont++;
		//acum vreau sa vad daca mai pot culege vreo gutuie
		if(cont==n)//daca le-am cules pe toate
			break;
		else
		{
			for(i=0;i<n;i++)
				if(a[i][0]>-1 && a[i][0]<=in_max)//daca mai e vreuna la care poate ajunge Ion
				{
					ok=1;
					break;
				}
			if(ok==0)
				break;
		}
	}
	fprintf(g,"%i",gr_max);
}