算法
(贪心、排序) $O(nlog(n))$
本题只需对每个人的技能值按照从高到低的顺序进行分组。具体做法:对技能值从高到低进行遍历,每次在当前组中加入一个元素,并判断当前组中最后一个元素与元素个数的乘积是否大于等于x
,若是,则++ans
,否则继续添加元素。
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
constexpr int N = 1e5 + 10;
int a[N];
int main() {
int t;
cin >> t;
while (t--) {
int n, x;
cin >> n >> x;
for (int i = 0; i < n; cin >> a[i], ++i);
sort(a, a + n);
reverse(a, a + n);
int ans = 0, cnt = 0;
for (int i = 0; i < n; ++i) {
++cnt;
if (1ll * a[i] * cnt >= x) {
++ans;
cnt = 0;
}
}
cout << ans << '\n';
}
return 0;
}