题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
收藏
关注
有n只袋鼠。每只袋鼠的大小用一个整数表示。一只小袋鼠能装进一只大袋鼠的条件是,大袋鼠的大小至少是小袋鼠的两倍。
每只大袋鼠最多可以装一只袋鼠。小袋鼠被装进大袋鼠之后就不能再装其它的袋鼠了。
小袋鼠被装进大袋鼠之后就不能被我们看见了。请找出一个装袋鼠的方案,使得被看见的袋鼠最少。
Input
单组测试数据。 第一行包含一个整数n(1≤n≤5*10^5)。 接下来n行,每行一个整数si,表示第i只袋鼠的大小 (1≤si≤10^5)。
Output
输出一个整数,即最少能看见的袋鼠数量。
Input示例
8 2 5 7 6 9 8 4 2
Output示例
5
蜜汁四级....
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int a[600000];
int vist[600000];
int e_sort(int l,int r)
{
int mid;
while(l<r)
{
mid=(l+r)/2;
if(a[0]*2>=a[mid])
{
l=mid+1;
}
else
{
r=mid;
}
}
return l;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
memset(vist,0,sizeof(vist));
int sum=e_sort(0,n-1);
//cout<<sum<<endl;
int ans=0;
for(int i=0;i<n/2;i++)
{
for(int j=sum;j<n;j++)
{
if(a[i]*2<=a[j])
{
ans++;
sum++;
break;
}
else
{
sum++;
}
}
}
// cout<<sum<<" "<<ans<<endl;
cout<<n-ans<<endl;
return 0;
}