Pagini recente » Cod sursa (job #693679) | Cod sursa (job #840929) | Cod sursa (job #2016482) | Cod sursa (job #2482940) | Cod sursa (job #419218)
Cod sursa(job #419218)
#include<stdio.h>
#include<math.h>
FILE *in,*out;
typedef struct cuibar
{
int val;
int poz1;
int poz2;
};
cuibar u[100000];
void quicksort(cuibar array[100000],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[100000],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;
}