题目链接:https://codeforces.com/contest/1355/problem/B
题意:
每人都有一个组团人数,值为 e i e_i ei的人只能加入大于等于 e i e_i ei个人的团,求最多能组成多少个团.
思路:
就是一个贪心,先从小到大排序,然后积累人数看是否大于
e
i
e_i
ei,如果大于则人数重新积累,否则积累人数+1;
具体看代码
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[300010];
int main() {
int t, n;
cin >> t;
while (t--)
{
int ans = 0;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
for (int i =0, cnt = 0; i < n; i++)
{
if (++cnt >= a[i])
{
cnt = 0;
ans++;
}
}
cout << ans << endl;
}
return 0;
}