Cod sursa(job #36400)

Utilizator TheCreeepIonita Andrei Lucian TheCreeep Data 23 martie 2007 15:22:53
Problema Euro Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <stdio.h>
long long tx,ty,x[40001][5],y[40001][5],z[40001];
FILE *f;
int i,j,n,t;
int main (void)
{
	f=fopen("euro.in","r");
	fscanf(f,"%d %d",&n,&t);
	for(i=1;i<=n;i++) fscanf(f,"%lld",&z[i]);	
	fclose(f);
	for(i=1;i<=n;i++)
	{
		// x in mana
		// y in cont
		x[i][1]=x[i-1][1]+z[i]*i-t;
		y[i][1]=0;			// mana+ <>
	
		x[i][2]=x[i][1]; 		//mana+
		y[i][2]=0;
			
		x[i][3]=x[i][1];		// cont+
		y[i][3]=0;
		
		x[i][4]=x[i][1];		// cont-
		y[i][4]=0;
		// initializare pt a avea un maxim sa compar
		
		for(j=1;j<=4;j++)
		{
			tx=x[i-1][j]; // daca vars in cont
			ty=y[i-1][j]+z[i];

			// 1, mana+<>
			// -
			// 2, mana+
			   if (tx>x[i][2] || (tx==x[i][2]&&ty>y[i][2]))
			   {
				   x[i][2]=tx;
				   y[i][2]=ty;
			   }
			// 3, cont+
			   if (ty>y[i][3] || (ty==y[i][3] && tx>x[i][3]))
			   {
				   x[i][3]=tx;
				   y[i][3]=ty;
			   }
			// 4, cont-
			   if (ty<y[i][4] || (ty==y[i][4] && tx>x[i][4]))
			   {
				   x[i][4]=tx;
				   y[i][4]=ty;
			   }
			tx=x[i-1][j]+(y[i-1][j]+z[i])*i-t; // daca schimb
			ty=0;

			// 1, mana+<>
		           if (tx>x[i][1]) x[i][1]=tx;
			// 2, mana+
			   if (tx>x[i][2] || (tx==x[i][2]&&ty>y[i][2]))
			   {
				   x[i][2]=tx;
				   y[i][2]=ty;
			   }
			// 3, cont+
			   if (ty>y[i][3] || (ty==y[i][3] && tx>x[i][3]))
			   {
				   x[i][3]=tx;
				   y[i][3]=ty;
			   }
			// 4, cont-
			   if (ty<y[i][4] || (ty==y[i][4] && tx>x[i][4]))
			   {
				   x[i][4]=tx;
				   y[i][4]=ty;
			   }
		}		
	}
	f=fopen("euro.out","w");
	fprintf(f,"%lld\n",x[n][1]);
	fclose(f);
	return 0;
}