算法
(模拟,贪心) $O(n)$
本题数值相同的怪兽互相无法破防,且游戏结束时希望未被消灭的怪兽尽可能少。
可以按数值 $i$ 从小到大将每个怪兽加入游戏。
设当前局面中有怪兽 $cnt_i$ 只,接下来我们要加入数值更大的怪兽 $r$ 只。我们肯定希望留给之后的怪兽尽可能少,所以可以贪心地尝试击败现有的怪兽。
当前局面剩下的怪兽数就是 $cnt_i+r-min(cnt_i,r)=max(cnt_i,r)$
时间复杂度
模拟此过程即可,时间复杂度 $O(n)$。
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, ans;
int cnt[N];
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++ )
{
int r;
scanf("%d", &r);
cnt[r] ++ ;
ans = max(ans, cnt[r]);
}
printf("%d\n", ans);
return 0;
}
备注:cf 903c