Description
有一堆形状完全一样的箱子,但是他们的强度不同,如果一个箱子的强度为x,那么这个箱子上面最多可以放x个箱子。
现在我们已知一堆箱子的强度,我们想把这些箱子放置成一列一列的形状,每一列包含多个箱子,问最少可以放置多少列。
Input
输入为多组数据,第一行为样例数T。
每组数据先输入一个n(1 <= n <= 100),表示箱子的总数。
紧接着输入n个数x1,x2,x3,,,xn(0 <= xi <= 100),第i个数表示第i个箱子的强度。
Output
输出只包含一个整数,表示最少的数列。
Sample Input
2
3
0 0 10
5
0 1 2 3 4
Sample Output
2
1
#include<bits/stdc++.h>
using namespace std;
int a[100+10], b[100+10];
int main()
{
int T, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
memset(a, -1, sizeof(a));
memset(b, 0, sizeof(b));
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
sort(a, a+n);
int t = n, ans = 0;;
while(t > 0)
{
int flag = 0, num = 0;
for(int i = 0; i < n; i++)
{
if(b[i] == 0 && flag == 0)
{
flag = 1;
b[i] = 1;
num++;
t--;
}
if(b[i] == 0 && flag == 1)
{
if(a[i] >= num)
{
num++;
b[i] = 1;
t--;
}
}
}
ans++;
}
printf("%d\n",ans);
}
return 0;
}