解法很简单,直接求众数即可。
很显然,每个怪兽尽量发挥自己活着的价值,即尽量干掉一个比他攻击值小的怪兽。
很显然,攻击值越大应该越晚被干掉。
我们按攻击力从大到小分层。
那么如果都不相等,那应该只会留下攻防最大的那个。
设第 i 层人数为 ai.
每一层都应该会留下 max{ai−1−ai,0} 个怪兽。其实把这个值加起来就对了,但是还要解释一下为什么众数是对的。
我们发现是 ai−1>ai 这个值就是其差,否则为 0.
我们直接令 bi=ai−ai−1,那么就是b 数组大于零值的和,设 b 数组选出来大于零的的值为 c 集合(即bci>0,且 c 是极大的),那么aci 是严格单调上升的。
所以说答案为∑bci−bci−1,即 ac∣c∣,又因aci 单调上升,所以 ac∣c∣ 一定是max{aci},而 c 是极大的,所以即为 maxai.
代码如下:
#include<bits/stdc++.h>
const int N=1e5+6;
int n,x,mp[N],ans;
int main()
{
scanf("%d",&n);
while(n--)
{
scanf("%d",&x);
ans=std::max(ans,++mp[x]);
}
printf("%d\n",ans);
return 0;
}