Cod sursa(job #2421903)

Utilizator Dragne.Andrei11Dragne Andrei Dragne.Andrei11 Data 16 mai 2019 17:06:54
Problema Oo Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax=100005;

pair <int, int> v[nmax];

bool visited[nmax];

bool cmp(pair <int, int> a, pair <int, int> b){return a.first>b.first;}

int main()
{
    freopen("oo.in", "r", stdin);
    freopen("oo.out", "w", stdout);
    int n;

    scanf("%d", &n);
    int nrmax=n/3;
    for(int i=1;i<=n;i++)
    {
        int nr;
        scanf("%d", &nr);
        v[i].first=nr;
        v[i].second=i;
    }
    int in=v[1].first;
    for(int i=1;i<n;i++)
        v[i].first+=v[i+1].first;
    v[n].first+=in;
    sort(v+1, v+n+1, cmp);
    int rasp=0;
    for(int i=1;i<=n&&nrmax;i++)
    {
        if(visited[v[i].second]==false&&visited[v[i].second+1]==false)
        {
            if(v[i].second==n)
                if(visited[1]==true)
                    continue;
            nrmax--;
            rasp+=v[i].first;
            visited[v[i].second]=true;
            visited[v[i].second+1]=true;
            if(v[i].second+1>n)
                visited[(v[i].second+1)%n]=true;
            visited[v[i].second+2]=true;
            if(v[i].second+2>n)
                visited[(v[i].second+2)%n]=true;
            visited[v[i].second-1]=true;
            if(v[i].second-1==0)
                visited[n]=true;
        }
    }
    printf("%d\n", rasp);

    return 0;
}