题目链接
题意:
把n个人分成几个团队,每个人都有自己的技能数,在分团队的时候要满足队中最低技能数 * 该团队的人数不能小于x。每个人只能在一个团队,但是有的人可以没有团队,求最多的团队数。
思路:
将所有人按照技能点从大到小排列,然后从最大的开始选取,将他们放入团队,如果满足条件那么就开新的团队,知道所有人都放入团队中(最后一个团队可能不会成为一个合格的团队)。
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
typedef long long ll;
const int N=1e6+5;
const int mod=998244353;
const int inf=0x7fffffff;
const double pi=3.1415926535;
using namespace std;
#include<bits/stdc++.h>
using namespace std;
int a[100005];
signed main()
{
int t;
cin>>t;
while(t--)
{
int n,x;
cin>>n>>x;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
int count1=0,cnt=0,k=n;
while(k--)
{
cnt++;
if(cnt*a[k]>=x)
{
count1++;
cnt = 0;
}
}
cout<<count1<<endl;
}
return 0;
}