题目链接
#include <iostream>
#include <math.h>
#include <stdio.h>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int data[];
int main()
{
int T,n,t;
scanf("%d",&T);
while(T--) {
int tmp;
scanf("%d%d",&n,&t);
for(int i=;i<n;i++) {
scanf("%d",&data[i]);
}
sort(data,data+n);
int l=,r=n;
while(l<r) {
int mid=(l+r)/;
int i = ;
while (data[i]== && i<n) i++;
long long ansT = , pos = ;
queue<int> que;
i--;
if(i==-) i=;
int tmp = (n-i-)%(mid-);
if (tmp) {
tmp++;
while (tmp--) pos += data[i++];
que.push(pos);
ansT += pos;
}
while (i<n||que.size() > ) {
pos = ;
for (int j = ; j < mid; j++) {
if (i == n && que.empty()) break;
if (que.empty()) {
pos += data[i++];
continue;
}
else if (i == n) {
pos += que.front();
que.pop();
continue;
}
else if (data[i] < que.front()) {
pos += data[i++];
}
else {
pos += que.front();
que.pop();
}
}
ansT += pos;
que.push(pos);
}
if(ansT<=t) r=mid;
else l=mid+;
}
printf("%d\n",l);
//printf("%d\n",r);
}
return ;
}
/*
100
3 3
1 2 4
1 2
2 3
3 1
*/