链接:点击打开链接
题意:有n只袋鼠,大袋鼠必须比小袋鼠的二倍要大才能将小袋鼠放入自己的口袋中,问最后最少能看到几只袋鼠
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int a[500005];
int main(){
int n,i,j,st,en,sum;
while(cin>>n){
for(i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
st=n;en=n/2;
sum=0;
while(st>en&&en>=1){ //假如一共有k只袋鼠被装入大袋鼠中
if(a[st]>=2*a[en]) //那么一共有2*k只袋鼠被用到,所以
st--,en--,sum++; //一定有一种最优解是最大的k个装最
else if(a[st]<2*a[en]) //小的k个,因此模拟一下就可以
en--;
// cout<<st<<" "<<en<<" "<<sum<<endl;
}
cout<<n-sum<<endl;
}
return 0;
}