1. 程式人生 > >計蒜客藍橋杯模擬賽:輕重搭配:貪心

計蒜客藍橋杯模擬賽:輕重搭配:貪心

name 輸出 一行 round 格式 out scrip 排序 計蒜客

問題描述

n 個同學去動物園參觀,原本每人都需要買一張門票,但售票處推出了一個優惠活動,一個體重為 x 的人可以和體重至少為 2x 配對,這樣兩人只需買一張票。現在給出了 n 個人的體重,請你計算他們最少需要買幾張門票?

輸入格式

第一行一個整數 n,表示人數。

第二行 n 個整數,每個整數 ai? 表示每個人的體重。

輸出格式

一個整數,表示最少需要購買的門票數目。

數據範圍

對於 30% 的數據:1 n25,1ai?100。

對於 60% 的數據:1 n10000,1ai?1000。

對於 100% 的數據:1 n510^5,1ai?10^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;
}

  

計蒜客藍橋杯模擬賽:輕重搭配:貪心