計蒜客藍橋杯模擬賽:輕重搭配:貪心
阿新 • • 發佈:2019-02-05
name 輸出 一行 round 格式 out scrip 排序 計蒜客
問題描述
n 個同學去動物園參觀,原本每人都需要買一張門票,但售票處推出了一個優惠活動,一個體重為 x 的人可以和體重至少為 2x 配對,這樣兩人只需買一張票。現在給出了 n 個人的體重,請你計算他們最少需要買幾張門票?
輸入格式
第一行一個整數 n,表示人數。
第二行 n 個整數,每個整數 ai? 表示每個人的體重。
輸出格式
一個整數,表示最少需要購買的門票數目。
數據範圍
對於 30% 的數據:1 ≤n≤25,1≤ai?≤100。
對於 60% 的數據:1 ≤n≤10000,1≤ai?≤1000。
對於 100% 的數據:1 ≤n≤5⋅10^5,1≤ai?≤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; }
計蒜客藍橋杯模擬賽:輕重搭配:貪心