1 条题解

  • 0
    @ 2026-10-26 22:20:37

    思路与算法

    初始工兵及增援形成带符号气势和,枚举第二次增援营地使绝对差最小;128位中间和避免10^5与10^9联合范围溢出,同差保留小编号。

    按上述模型建立状态或枚举对象,依代码中的顺序处理输入并输出完整答案。

    正确性说明

    以龙减虎的有符号气势Z表示状态,新兵在i营的贡献是s2(m-i)。穷举所有营地使其绝对值最小覆盖所有合法决策,升序严格改善更新实现最小编号。

    复杂度

    O(n)时间、O(n)存储工兵,初始化和气势累加均线性。

    易错点

    总气势可超过有符号64位,用128位累加与比较;增援落在分界营贡献为0。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n;
        cin >> n;
        vector<long long> a(n + 1);
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        int m, p;
        long long s, t;
        cin >> m >> p >> s >> t;
        a[p] += s;
        __int128 z = 0;
        for (int i = 1; i <= n; i++)
            z += (__int128)a[i] * (m - i);
        __int128 best = -1;
        int ans = 1;
        for (int i = 1; i <= n; i++) {
            __int128 v = z + (__int128)t * (m - i);
            if (v < 0)
                v = -v;
            if (best < 0 || v < best) {
                best = v;
                ans = i;
            }
        }
        cout << ans << "\n";
    }
    
    • 1

    信息

    ID
    1890
    时间
    1000ms
    内存
    256MiB
    难度
    普及−
    标签
    递交数
    0
    已通过
    0
    上传者