Cod sursa(job #419220)

Utilizator SadmannCornigeanu Calin Sadmann Data 17 martie 2010 10:02:18
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.28 kb
#include<stdio.h>
#include<math.h>
FILE *in,*out;

typedef struct cuibar
{
	int val;
	int poz1;
	int poz2;
};
cuibar u[10000];



void quicksort(cuibar array[10000],int left,int right)
{
	if(left<right)
	{
		int v,j,i;
		cuibar aux;
		v=array[right].val;
		i=left-1;
		j=right;
		for(;;)
		{
			while(array[++i].val>v);
			while(array[--j].val<v);
			if(i>=j)
				break;
			aux=array[i];
			array[i]=array[j];
			array[j]=aux;
		}
		aux=array[i];
		array[i]=array[right];
		array[right]=aux;
		quicksort(array,left,i-1);
		quicksort(array,i+1,right);
	}
}

int n,m[10000],aux,c=1,ok=2,contor,i;
long long sum;
int main ()
{
	in=fopen("oo.in","rt");
	out=fopen("oo.out","wt");
	fscanf(in,"%d",&n);
	contor=n;
	for(i=1;i<=n;i++)
	fscanf(in,"%d",&m[i]);
	u[1].val=m[1]+m[n];
	u[1].poz1=n;
	u[1].poz2=1;
	for(i=1;i<n;i++)
	{
		u[i+1].val=m[i]+m[i+1];
		u[i+1].poz1=i;
		u[i+1].poz2=i+1;
    }
	quicksort(u,1,n);
 
	while(c<=n)
    {
		if(m[u[c].poz1]!=-1 && m[u[c].poz2]!=-1) 
        {
			sum+=u[c].val;
			m[u[c].poz1]=m[u[c].poz2]=-1;
			if(u[c].poz1==1)
				m[n]=m[3]=-1;
			else
			{
				if(u[c].poz2==n)
					m[1]=m[n-2]=-1;
				else
					m[u[c].poz1-1]=m[u[c].poz2+1]=-1;
			}
		}
		c++;
	}
			
			/*if(s[i]==max[c])
            {
				if(m[i-1]!=-1 && m[i]!=-1)
	            {
					sum+=s[i];
				    s[i]=-1;
				    if(i==n)
				    {
						m[1]=m[i-2]=m[i-1]=m[i]=-1;
						s[i-1]=s[1]=-1;
					}
					if(i==1)
				    {
						m[1]=m[n]=m[2]=m[n-1]=-1;
						s[n]=s[2]=-1;
				    }
					if(i==2)
					{
						m[1]=m[2]=m[3]=m[n]=-1;
						s[1]=s[3]=-1;
					}
					else
					{
						m[i+1]=m[i]=m[i-1]=m[i-2]=-1;
						s[i+1]=s[i-1]=-1;
				    }
				}
			    else
				{
					if(m[i+1]!=-1 && m[i]!=-1)
					{
						sum+=s[i];
						s[i]=-1;
						if(i==n)
					    {
							m[1]=m[i-2]=m[i-1]=m[i]=-1;
							s[i-1]=s[1]=-1;
						}
						if(i==1)
						{
							m[1]=m[n]=m[2]=m[n-1]=-1;
							s[n]=s[2]=-1;
					    }
						if(i==2)
					    {
						m[1]=m[2]=m[3]=m[n]=-1;
						s[1]=s[3]=-1;
			    		}
						else
					    {
							m[i+1]=m[i]=m[i-1]=m[i-2]=-1;
							s[i+1]=s[i-1]=-1;
						}
					}
				}
			}
		}
	    c++;
	}*/
  
	fprintf(out,"%lld",sum);

	return 0;
}