题目链接:https://nanti.jisuanke.com/t/36116
n个人,最少的门票,n/2张。
mid = (n-1)/2
然后 l = mid, r = n-1。两边比较,模拟一下过程,如果arr[i] * 2 < arr[j] 那就 n--。否则就 l--。去找下一个小于的数看是否能满足条件。
%100通过代码
#include <bits/stdc++.h>
#define M 1000009
using namespace std;
int arr[M];
int main()
{
int n,r,l,mid;
cin>>n;
for(int i = 0; i < n; i++)
cin>>arr[i];
sort(arr,arr+n);
mid = (n-1)/2;
l = mid, r = n-1;
while(l >= 0 && r > mid)
{
if(arr[l]*2 <= arr[r])
{
n--;
l--,r--;
}
else l--;
}
cout<<n<<endl;
return 0;
}