CF 373C. Counting Kangaroos is Fun

刚开始看到 Acc 上这题标签线段树的时候我还是很惊讶的,这不就是一个小小的贪心吗?

暴力,暴力怎么做?贪心!贪心!贪心!然后大力出奇迹。

首先我们将这个数组排序。然后,我们可以发现,对于每个大袋鼠可以装的小袋鼠集合,选取集合中最大的袋鼠最优。

我们就可以把数组以 \(\dfrac{n}{2}\) 为界切成两部分,枚举前半段,从 \(\dfrac{n}{2}\to 1\),若能放进目前最大可放的袋鼠就放进去。

令初始 \(ans=n\),若无法成功放进袋子则 \(ans\) 减一。

//373C. Counting Kangaroos is Fun
#include <bits/stdc++.h>
using namespace std;
int n,a[int(5e5+5)],ans;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    sort(&a[1],&a[n+1]);
    ans=n;
    for(int i=n>>1;i;i--)
    {
        if(a[ans]>=(a[i]<<1))
        {
            ans--;
        }
    }
    printf("%d\n",ans);
    return 0;
}
/*
 * CF
 * https://codeforces.com/problemset/problem/373/C
 * C++20 -O0
 * 2022.10.6
 */

事实证明,不能啥都按 Acc 标签上的来。

posted @ 2022-10-06 15:59  Day_Dreamer_D  阅读(137)  评论(0)    收藏  举报