Cod sursa(job #2014166)

Utilizator shantih1Alex S Hill shantih1 Data 23 august 2017 00:29:38
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.51 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("oo.in");
ofstream fout("oo.out");

int n, i, j, mx, in, sum, a, b, c, sf, x, y, z, t, v[200005], s[200005], rez;

int main () {
    
    /*fin >> n;
    for (i = 1; i <= n; i++)
    {
        fin >> v[i];
        s[i] = s[i-1]+v[i];
        v[i+n] = v[i];
    }
    for (i = n+1; i <= n*2; i++)
        s[i] += s[i-1]+v[i-n];
    
    for (in = 1; in <= 4; in++)
    {
        sf = in + n-4;
        sum = v[sf+1]+v[sf+2];
        
        for (i = in; i <= sf-2; i++)
        {
            a = b = c = -300;
            
            for (j = i; j < sf; j++)    t += v[j];
        
            a = t;
            if (i+2 < sf)   a -= v[i+2];
    
            if (i+2 < sf)
            {
                b = t-v[i];
                if (i+3 < sf)   b -= v[i+3];
            }
            
            if (i+3 < sf)
            {
                c = t-v[i]-v[i+1];
                if (i+4 < sf)  c -= v[i+4];
            }
            
            // compar
            if (a >= b && a >= c)      {    sum += v[i]+v[i+1];     i += 2; }
            else if (b > a && b >= c)  {    sum += v[i+1]+v[i+2];   i += 3; }
            else if (c > a && c > b)   {    sum += v[i+2]+v[i+3];   i += 4; }
        }
        
        if (sum > rez)  rez = sum;
    }
    
    fout << rez << "\n";*/
    
    fin >> n;
    for (i = 1; i <= n; i++)
    {
        fin >> v[i];
        s[i] = s[i-1]+v[i];
        v[i+n] = v[i];
    }
    for (i = n+1; i <= n*2; i++)
        s[i] += s[i-1]+v[i-n];
    
    for (in = 1; in <= 4; in++)
    {
        sf = in + n-4;
        sum = v[sf+1]+v[sf+2];
        
        for (i = in; i <= sf-2; i++)
        {
            a = b = c = -300;
            t = s[sf-1]-s[i-1];
            
            // calculez a
            a = t - v[i+2];
            if (i+2 >= sf)  a += v[i+2];
            
            // calculez b
            if (i+2 < sf)
            {
                b = t-v[i]-v[i+3];
                if (i+3 >= sf)  b += v[i+3];
            }
            // calculez c
            if (i+3 < sf)
            {
                c = t-v[i+1]-v[i+4];
                if (i+4 >= sf)  c += v[i+4];
            }
            
            // compar
            if (a >= b && a >= c)      {    sum += v[i]+v[i+1];     i += 2; }
            else if (b > a && b >= c)  {    sum += v[i+1]+v[i+2];   i += 3; }
            else if (c > a && c > b)   {    sum += v[i+2]+v[i+3];   i += 4; }
        }
        
        if (sum > rez)  rez = sum;
    }
    
    fout << rez << "\n";
}