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。
样例
输入:
6
1 9 7 3 5 5
输出:
4
1 和 9 配对,7 和 3 配对,剩下 5,5 单独,一共买四张票。
题解:
这里用了贪心,把数据排好序分成两段,前一段最轻的和后一段最轻的匹配即可。
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 500003
using namespace std;
int n,a[maxn],ans;
int main(){
cin>>n;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
sort(a,a+n);
for(int t=0,i=n/2;i<n&&t<n/2;i++){
if(a[i]>=2*a[t]){
ans++;
t++;
}
}
cout<<n-ans<<endl;
return 0;
}