Cod sursa(job #36416)

Utilizator TheCreeepIonita Andrei Lucian TheCreeep Data 23 martie 2007 15:56:46
Problema Euro Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 2.1 kb
#include <stdio.h>
long long tx,ty,x[40001][6],y[40001][6],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;

		x[i][0]=x[i][1];		// supposed earnings max
		y[i][0]=y[i][1];		
		
		x[i][5]=x[i][1];		// daca tot max chestie
		y[i][5]=y[i][1];		
		
		// initializare pt a avea un maxim sa compar
		
		for(j=0;j<=5;j++)
		{
			tx=x[i-1][j]; // daca vars in cont
			ty=y[i-1][j]+z[i];
			
			// 0, chestie+		
			if ((tx+ty*i)>(x[i][0]+y[i][0]*i))
			{
				x[i][0]=tx;
				y[i][0]=ty;
			}
			// 5, chestie+ daca tot...
			if (tx+ty*i+ty>x[i][5]+y[i][5]*i+y[i][5]);
			{
				x[i][5]=tx;
				y[i][5]=ty;
			}			
			// 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;
			   }
			
			// 0, chestie+		
			if ((tx+ty*i)>(x[i][0]+y[i][0]*i))
			{
				x[i][0]=tx;
				y[i][0]=ty;
			}
			// 5, chestie+ daca tot...
			if (tx+ty*i+ty>x[i][5]+y[i][5]*i+y[i][5]);
			{
				x[i][0]=tx;
				y[i][0]=ty;
				
			}
		}		
	}
	f=fopen("euro.out","w");
	fprintf(f,"%lld\n",x[n][1]);
	fclose(f);
	return 0;
}