P11231 [CSP-S 2024] 决斗
解题思路
这道题目要求我们找到一种最优的攻击顺序,使得游戏结束时剩余的怪兽数量最少。通过分析题目规则,我们可以发现关键在于如何最大化消灭怪兽的数量。
方法思路
-
统计频率:统计每个攻击力/防御力值的出现次数
-
找出最大值:剩余怪兽的最小数量等于出现次数最多的那个攻击力/防御力值的出现次数
-
数学推导:因为相同攻击力的怪兽无法互相消灭,所以这些怪兽必然保留到最后
代码注释
#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; }

浙公网安备 33010602011771号