P11231 [CSP-S 2024] 决斗

解题思路

这道题目要求我们找到一种最优的攻击顺序,使得游戏结束时剩余的怪兽数量最少。通过分析题目规则,我们可以发现关键在于如何最大化消灭怪兽的数量。

方法思路

  1. 统计频率:统计每个攻击力/防御力值的出现次数

  2. 找出最大值:剩余怪兽的最小数量等于出现次数最多的那个攻击力/防御力值的出现次数

  3. 数学推导:因为相同攻击力的怪兽无法互相消灭,所以这些怪兽必然保留到最后

代码注释

#include<bits/stdc++.h>
#define ll long long  // 定义长整型别名
using namespace std;
const int N = 1e5+10,inf = 0x3f3f3f3f;  // 定义常量
int n,x,vis[N],ans;  // n-怪兽数量,x-临时变量,vis-统计数组,ans-结果

int main()
{
    cin >> n;  // 读取怪兽数量
    for(int i = 1; i <= n; i++)  // 循环读取每个怪兽的属性
    {
        cin >> x;  // 读取当前怪兽的攻击力/防御力
        vis[x]++;  // 统计该属性值的出现次数
        ans = max(ans,vis[x]);  // 更新最大出现次数
    }
    cout << ans;  // 输出结果(剩余怪兽的最小可能数量)
    return 0;
}

 

posted @ 2025-05-20 17:43  CRt0729  阅读(177)  评论(0)    收藏  举报