Cod sursa(job #3273781)

Utilizator IonicaDavidIonica David IonicaDavid Data 3 februarie 2025 20:29:04
Problema Oo Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

long long compute_max(const vector<int>& p) {
    int m = p.size();
    if (m == 0) return 0;
    if (m == 1) return p[0];
    if (m == 2) return max((long long)p[0], (long long)p[1]); // Conversie explicită

    long long dp0 = p[0];
    long long dp1 = max((long long)p[0], (long long)p[1]); // Conversie explicită
    long long dp2 = max(dp1, (long long)p[2]); // Conversie explicită

    if (m == 3) return dp2;

    for (int i = 3; i < m; ++i) {
        long long current = max(dp2, (long long)p[i] + dp0); // Conversie explicită
        dp0 = dp1;
        dp1 = dp2;
        dp2 = current;
    }
    return dp2;
}

int main() {
    ifstream fin("oo.in");
    ofstream fout("oo.out");

    int N;
    fin >> N;
    vector<int> a(N);
    for (int i = 0; i < N; ++i) {
        fin >> a[i];
    }

    vector<int> p(N);
    for (int i = 0; i < N; ++i) {
        p[i] = a[i] + a[(i+1) % N];
    }

    vector<int> case1_p(p.begin(), p.end() - 1);
    vector<int> case2_p(p.begin() + 1, p.end());

    long long max_case1 = compute_max(case1_p);
    long long max_case2 = compute_max(case2_p);

    fout << max(max_case1, max_case2) << endl;

    return 0;
}