1 条题解

  • 0
    @ 2026-5-4 17:07:28

    题意简述

    给定奇数长度数组 aa。每次删除相邻的两个元素,直至只剩下一个元素。求最后剩下的元素的最大可能值。

    关键观察

    考虑元素的下标(1‑indexed)。每次删除相邻的两个元素,这两个元素的下标一定是一个偶数、一个奇数(相邻的两个位置奇偶性不同)。删除这两个元素后,后续元素的下标前移。但无论怎样操作,最后剩下的那个元素在原数组中的下标奇偶性始终保持不变。实际上,剩下的元素必然来自原数组的奇数位置(第 1、3、5、……个元素)。

    粗略证明:总长度为奇数,每次减少 2,最终剩下 1 个元素。初始奇数位置比偶数位置多 1 个(因为 nn 是奇数,索引 1,3,,n1,3,\dots,n(n+1)/2(n+1)/2 个,偶数位置 (n1)/2(n-1)/2 个)。每次删除必然删掉一个奇数位和一个偶数位,因此奇数位永远比偶数位多 1 个。最终剩下的那个必然是奇数位。

    因此,答案就是所有奇数位置上元素的最大值,即 max{a1,a3,a5,}\max\{a_1, a_3, a_5, \dots\}

    复杂度

    每组数据扫描一次数组,时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)t1000,n99t \le 1000, n \le 99 极易通过。

    参考代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        int t;
        cin >> t;
        while (t--) {
            int n;
            cin >> n;
            int ans = 0;
            for (int i = 1; i <= n; ++i) {
                int x;
                cin >> x;
                if (i % 2 == 1) { // 奇数位置
                    ans = max(ans, x);
                }
            }
            cout << ans << "\n";
        }
        return 0;
    }
    
    • 1

    信息

    ID
    6816
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者