Pagini recente » Cod sursa (job #876211) | Cod sursa (job #1909055) | Cod sursa (job #638083) | Cod sursa (job #1321726) | Cod sursa (job #2578201)
#include <bits/stdc++.h>
using namespace std;
ifstream in("oo.in");
ofstream out("oo.out");
int v[100001];
bool viz[100001];
int n;
struct ss
{
int best,poz;
}best[100001];
bool cmp(ss a,ss b)
{
return a.best>b.best;
}
bool check(int i)
{
int a=best[i].poz;
if(a==1)
{
if(viz[a]==0&&viz[a+1]==0&&viz[n]==0&&viz[n-1]==0)
return 1;
}
else if(a==2)
{
if(viz[a]==0&&viz[a+1]==0&&viz[n]==0&&viz[a-1]==0)
return 1;
}
else if(a==n)
{
if(viz[a]==0&&viz[a-1]==0&&viz[1]==0&&viz[a-2]==0)
return 1;
}
else
{
if(viz[a]==0&&viz[a+1]==0&&viz[a-1]==0&&viz[a-2]==0)
return 1;
}
return 0;
}
void mark(int i)
{
int a=best[i].poz;
if(a==1)
{
viz[a]=1;
viz[a+1]=1;
viz[n]=1;
viz[n-1]=1;
}
else if(a==2)
{
viz[a]=1;
viz[a+1]=1;
viz[n]=1;
viz[a-1]=1;
}
else if(a==n)
{
viz[a]=1;
viz[a-1]=1;
viz[1]=1;
viz[a-2]=1;
}
else
{
viz[a]=1;
viz[a+1]=1;
viz[a-1]=1;
viz[a-2]=1;
}
}
int main()
{
in>>n;
for(int i=1;i<=n;i++)
{
in>>v[i];
best[i].poz=i;
}
for(int i=2;i<=n;i++)
{
best[i].best=v[i]+v[i-1];
}
best[1].best=v[1]+v[n];
sort(best+1,best+1+n,cmp);
int sum=0;
for(int i=1;i<=n;i++)
{
if(check(i)==1)
{
sum+=best[i].best;
mark(i);
}
}
out<<sum;
return 0;
}