← 返回题目页

A2452 [BalticOI 2015] Hacker【无数据】

标程

#include <bits/stdc++.h>
#include <vector>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<long long> a(3 * n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        a[i + n] = a[i];
        a[i + 2 * n] = a[i];
    }

    vector<long long> pre(3 * n + 1, 0);
    for (int i = 0; i < 3 * n; ++i) pre[i + 1] = pre[i] + a[i];

    // 黑客最终能拿到的台数:先手,每轮双方各取一台
    int k = (n + 1) / 2;
    long long best = 0;
    for (int s = 0; s < n; ++s) {
        int c = s + n; // 以 s 为中心的展开位置
        long long L = pre[c + 1] - pre[c - k + 1]; // 向左的 k 台
        long long R = pre[c + k] - pre[c];         // 向右的 k 台
        best = max(best, min(L, R));
    }

    cout << best << "\n";
    return 0;
}

动画演示