有手就会(2)CSP-S 2024 决斗
2025-10-26 23:22:00
发布于:上海
42阅读
0回复
0点赞
依旧是不太难的一题(如果有好的思路)
先说结论:相等战力怪物数量最多的值。
下面是证明:
设战斗力最小(i1)的怪物,有x个。
且有y个战斗力比他略高(i2)的怪兽(不存在一个战斗力为im的怪物使得i1<im<i2)
如果y>x,其中的x个会赶走原先的x个怪兽,还有y-x个怪物未参与战斗,最终一共有y个怪物。
如果y=x,那么y个怪物把x个怪物全部赶走,最终一共有y个怪物。
如果y<x,那么其中y个会赶走y个战斗力为i1怪物,留下x-y个战斗力i1的怪物,最终一共有x个怪物。
最终发现实际上结果是x和y中的最大值。
可以进一步推广到i2和i3的情况,甚至是i(n-1)和in的情况。
不过在y<x中的情况要进一步考虑,留下来的i1的怪物,在后续的比较中,也一定存在着i1<i2<in,大小并不重要。
所以综上,我们只需要统计所有战力相等的怪物,最终求出他们的最大值即可。
以下是代码:
#include <bits/stdc++.h>
using namespace std;
map<int,int>ans;
int main(){
int a;
cin>>a;
int an=0;
for(int i=0;i<a;i++){
int m;
cin>>m;
ans[m]++;
an=max(an,ans[m]);
}
cout<<an;
return 0;
}
这里空空如也



有帮助,赞一个