Cod sursa(job #46521)

Utilizator za_wolfpalianos cristian za_wolf Data 2 aprilie 2007 18:33:18
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>
long z[61],y[61],b,n,m,j,k,i,l,a,s,x[61];
int main()
{
	freopen("oo.in","r",stdin);
	freopen("oo.out","w",stdout);
	scanf("%ld",&n);
	for (i=1;i<=n;i++)
		scanf("%ld",&x[i]);
	for (i=1;i<=n;i++)
		if (i+3<=n) y[i]=x[i]+x[i+3]; else y[i]=x[i]+x[i+3-n];
/*	a=1;
	s=0;
	while (a)
	{
	k=100000;
	for (i=1;i<=n;i++)
	{
	if (i+1>n) a=1; else a=i+1;
	if (i+2>n) b=2; else b=i+2;
	if (z[i]==0&&y[i]<k&&z[a]==0&&z[b]==0) {k=y[i];l=i;}
	}
	if (k!=100000)
	{
	if (l+1<=n)	s+=x[l+1]; else s+=x[1];
	if (l+1<=n) z[l+1]=1; else z[1]=1;
	if (l+2<=n) s+=x[l+2]; else s+=x[2];
	if (l+2<=n) z[l+2]=1; else z[2]=1;
	//z[l]=1;
	} else a=0;
//	if (k==100) a=0;
	}
*/
	a=1;
	while (a)
	{
	k=-1;
	for (i=1;i<n;i++)
	if (z[i]==0&&z[i+1]==0&&x[i]+x[i+1]>k) {k=x[i]+x[i+1];l=i;}
	if (z[n]==0&&z[1]==0&&x[n]+x[1]>k) {k=x[n]+x[n+1];l=n;}
	if (k!=-1)
	{
	if (l==n) {s+=x[l]; s+=x[1];z[n]=1;z[n-1]=1;z[1]=1;z[2]=1;} else
	{
	if (l==1) z[n]=1; else z[l-1]=1;
	z[l]=1;
	z[l+1]=1;
	if (l+2<=n) z[l+2]=1; else z[2]=1;
	s+=x[l]; s+=x[l+1];
	}
	}
	else a=0;
	}
	printf("%ld\n",s);
	return 0;
}