1 条题解

  • 0
    @ 2025-1-23 20:32:03

    解法很简单,直接求众数即可。

    每个怪兽尽量发挥自己活着的价值,即尽量干掉一个比他攻击值小的怪兽。攻击值越大应该越晚嘎。

    按攻击力从大到小分层。

    那么如果都不相等,那应该只会留下攻防最大的那个。

    设第 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
    上传者