B - Young Explorers(Codeforces Round #737 (Div. 2))

题目描述

传送门

题目大意

每个人都有一个经验值,他只能加入人数比他经验值高或者等于他经验值的小组中。
问最多可以分多少组。

思路

贪心,将每个人按经验值从低到高排序
从前往后遍历,记录经验的最大值和目前的人数。
若人数和最大经验值相等,则ans+1

AC代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2e5+10;

int a[N];

int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n;
		scanf("%d",&n);
		for(int i=0;i<n;i++) scanf("%d",&a[i]);
		sort(a,a+n);
		int num=0;
		int need=0;
		int ans=0;
		for(int i=0;i<n;i++)
		{
			need=max(need,a[i]);
			num++;
			if(num==need)
			{
				need=num=0;
				ans++;
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}
posted @ 2021-08-03 21:26  TheWeak  阅读(39)  评论(0编辑  收藏  举报