【贪心】大鱼吃小鱼

链接

luogu U138099

题目描述

现在有n个数,当一个数至少是另一个数的两倍时,大的数可以消除掉小的数,现在要把这n个数两两分组,求最少可以剩余几个数

思路

贪心,大的分一块,小的分一块,直接匹配就好了

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;

int n, a[1000005], ans;

bool cmp(int x, int y)
{
    
    
	return x > y;
}

int main()
{
    
    
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i)
		scanf("%d", &a[i]);
	sort(a + 1, a + n + 1, cmp);
	int mid = n / 2;
	ans = n;
	for(int i = 1; i <= n / 2 && mid <= n; ++i)
	{
    
    
		while(a[i] < 2 * a[mid]) mid++;
		if(mid > n) break;
		if(a[i] >= 2 * a[mid]) ans--, mid++;
	}
	printf("%d", ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/LTH060226/article/details/120497807
今日推荐