计蒜客蓝桥杯模拟赛:轻重搭配:贪心

问题描述

n 个同学去动物园参观,原本每人都需要买一张门票,但售票处推出了一个优惠活动,一个体重为 x 的人可以和体重至少为 2x 配对,这样两人只需买一张票。现在给出了 n 个人的体重,请你计算他们最少需要买几张门票?

输入格式

第一行一个整数 n,表示人数。

第二行 n 个整数,每个整数 ai 表示每个人的体重。

输出格式

一个整数,表示最少需要购买的门票数目。

数据范围

对于 30% 的数据:1 n25,1ai100。

对于 60% 的数据:1 n10000,1ai1000。

对于 100% 的数据:1 n510^5,1ai10^5。

样例解释

1 和 9 配对,7 和 3 配对,剩下 5,5 单独,一共买四张票。

样例输入

6

1 9 7 3 5 5

样例输出

4

题目来源

2019 蓝桥杯省赛 B 组模拟赛(一)

输入后先排序,最少的情况就是全部可以配对,那只能排序后的前一半和后一半配对,所以直接从中间开始枚举就可以。

#include <bits/stdc++.h>
using namespace std;
int  a[500010],cnt;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int n;
    cin >> n;
    cnt=n;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    sort(a, a + n);
    int l = n/2-1,r=n-1;
    while(l>=0){
        if(a[r]>=a[l]*2){
            cnt--;
            r--;
            l--;
        }
        else
            l--;
    }
    cout << cnt << "\n";
    return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/52dxer/p/10352903.html