贪心+二分
能装进大袋鼠的小袋鼠,肯定是最小的那几个。
所以二分枚举小袋鼠的数量即可。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=500500;
int n,a[MAXN];
bool judge(int x)
{
for(int i=0,j=n-x;i<x;i++,j++)
{
if(a[i]+a[i]>a[j])
return 0;
}
return 1;
}
int main()
{
int i,x,ans,lef,rig,mid;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
lef=0;rig=n>>1;
while(lef<=rig)
{
mid=(lef+rig)>>1;
if(judge(mid))
lef=mid+1;
else
rig=mid-1;
}
printf("%d\n",n-rig);
}
}