链接:点击打开链接
题意:有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; }