轻重搭配 2020/11/26
我的思路就是按照二分法,将数组前半段和后半段进行比较,若后半段当前位满足不了二倍关系就右移一位,直至到达数组末尾。
#include <iostream>
#include <algorithm>
using namespace std;
int a[500005];
//轻重搭配
int main()
{
int n;
int i = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
sort(a, a + n);
int flag = 0;
int num = 0;
for (int i = 0; i < n / 2;)
{
if (2 * a[i] <= a[n/ 2 + flag])
{
num++;
i++;
}
if (flag == n / 2)
{
break;
}
flag++;
}
cout << num + (n - 2 * num) << endl;
}
标程如下:
#include <cstdio>
#include <algorithm>
using namespace std;
int a[500005];
int main()
{
int n;
scanf_s("%d", &n);
for (int i = 0; i < n; i++)
{
scanf_s("%d", &a[i]);
}
sort(a, a + n);
int ans = 0, pos = n / 2;
for (int i = 0; i < n / 2; i++)
{
while (pos < n && a[pos] < a[i] * 2)pos++;
if (pos == n)break;
ans+=2;
pos++;
}
printf("%d\n", ans);
return 0;
}
和我的思路一致