Cod sursa(job #2578201)

Utilizator AsthenichDog390Alex Preda AsthenichDog390 Data 10 martie 2020 18:51:07
Problema Oo Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#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;
}