1 条题解

  • 0
    @ 2026-10-27 1:47:48

    思路与算法

    统计每个攻击防御值的出现次数,答案是最大频次。无需模拟攻击顺序。

    正确性说明

    每次成功攻击必须从较大值指向较小值;每只怪物最多攻击一次、最多被成功消灭一次,成功边构成若干严格下降链。每条链至多含一个给定值,故最高频次f强制至少f条链、至少f个幸存者。反之准备f条链,每一种值的卡牌各分给不同链,链内降序排列,就能覆盖全部卡牌;每条链从低端向高端执行攻击,使内部怪物先用掉攻击机会再被消灭,最终仅留链顶。链顶未攻击者可进行不改变最少存活数的失败攻击,或仅剩一只时结束。上下界相同。

    复杂度

    O(n+V)时间、O(V)空间,V=100000;包含整个计数数组清零。

    易错点

    攻击力等于防御力不能消灭。不能当Nim或SG胜负题;目标是最少幸存数量,重复最多的值而非不同值数决定答案。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        vector<int> count(100001);
        int ans = 0;
        while (n--) {
            int x;
            cin >> x;
            ans = max(ans, ++count[x]);
        }
        cout << ans << "\n";
    }
    
    • 1

    信息

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