1 条题解
-
0
解法很简单,直接求众数即可。
每个怪兽尽量发挥自己活着的价值,即尽量干掉一个比他攻击值小的怪兽。攻击值越大应该越晚嘎。
按攻击力从大到小分层。
那么如果都不相等,那应该只会留下攻防最大的那个。
设第 i 层人数为 a i.
每一层都应该会留下 max{ai−1−ai,0}max{ai−1−ai,0} 个怪兽。其实把这个值加起来就对了,但是还要解释一下为什么众数是对的。
我们发现是 ai−1>aiai−1>ai 这个值就是其差,否则为 00.
我们直接令 bi=ai−ai−1bi=ai−ai−1,那么就是求 b 数组大于零值的和,设 bb 数组选出来大于零的的值为 c 集合(即 bci>0bci>0,且 cc 是极大的),那么 ac i 是严格单调上升的。
所以说答案为 ac∣c∣ac∣c∣,又因 ac i 单调上升,所以 ac∣c∣ac∣c∣ 一定是max{aci},而 cc 是极大的,所以即为 max ai.
代码如下:
#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; }
信息
- ID
- 34941
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者