Cod sursa(job #3340274)

Utilizator PopRadGabPopescu Radu Gabriel PopRadGab Data 13 februarie 2026 13:58:50
Problema Oo Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.61 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("oo.in");
ofstream fout ("oo.out");

int main()
{
    int n, v[100000] = {0}, s = 0, ok = 0, maxim = -1, imax;
    fin >> n;

    for ( int i = 0; i < n; i++)
    {
        fin >> v[i];
    }
    while ( ok == 0 )
    {
        ok = 1;
        maxim = -1;
        for ( int i = 0; i < n; i++)
        {
            if ( v[i] > maxim )
            {
                maxim = v[i];
                imax = i;
            }
        }
        if ( ( imax == n - 1 ) || ( imax == 0 ) )//caz particular, cand se ajunge la capat
        {
            if ( imax == n - 1)
            {
                if ( (v[0] > v[imax - 1] ) && (v[0] != -1) )
                {
                    s = s + v[imax] + v[0];
                    v[imax - 1] = -1;
                    v[imax] = -1;
                    v[0] = -1;
                    v[1] = -1;
                    ok = 0;
                }
                else if (v[imax - 1] != -1)
                {
                    s = s + v[imax] + v[imax - 1];
                    v[0] = -1;
                    v[imax] = -1;
                    v[imax - 1] = -1;
                    v[imax - 2] = -1;
                    ok = 0;
                }
            }
            if ( imax == 0 )
            {
                if ( (v[imax + 1] > v[imax - 1] ) && (v[imax + 1] != -1) )
                {
                    s = s + v[imax] + v[imax + 1];
                    v[imax - 1] = -1;
                    v[imax] = -1;
                    v[imax + 1] = -1;
                    v[imax + 2] = -1;
                    ok = 0;
                }
                else if (v[n-1] != -1)
                {
                    s = s + v[imax] + v[n-1];
                    v[imax + 1] = -1;
                    v[imax] = -1;
                    v[n - 1] = -1;
                    v[n - 2] = -1;
                    ok = 0;
                }
            }
        }
        //caz general
        if ( (v[imax + 1] > v[imax - 1] ) && (v[imax + 1] != -1) )
        {
            s = s + v[imax] + v[imax + 1];
            v[imax - 1] = -1;
            v[imax] = -1;
            v[imax + 1] = -1;
            if (imax + 1 == n-1 )
                v[0] = -1;
            else
                v[imax + 2] = -1;
            ok = 0;
        }
        else if (v[imax - 1] != -1)
        {
            s = s + v[imax] + v[imax - 1];
            v[imax + 1] = -1;
            v[imax] = -1;
            v[imax - 1] = -1;
            if (imax - 1 == 0 )
                v[n-1] = -1;
            else
                v[imax - 2] = -1;
            ok = 0;
        }
    }
    fout << s;
    return 0;
}