装箱子,最大数量取决于同种箱子的个数,每个箱子只能装一个箱子进去
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
//#define T
using namespace std;
int main()
{
#ifdef T
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif // T
int a[100100];
int vis[100100];
int n;
while(~scanf("%d",&n)&&n)
{
memset(a,0,sizeof(a));
memset(vis,0,sizeof(vis));
for(int i = 0; i < n;i ++)
{
scanf("%d",&a[i]);
}
int index = 1;
int Max = 1;
sort(a,a+n);
for(int i = 0; i < n-1; i++)
{
while(a[i] == a[i+1])
{
index ++;
i++;
}
if(index > Max)
Max = index;
index = 1;
}
int cnt = 0;
int i;
printf("%d\n",Max);
while(1)
{
if(cnt >= n ) break;
for(i = 0; i < n; i++)
if(!vis[i]) break;
cnt ++;
vis[i] = 1;
printf("%d",a[i]);
i += Max;
for(;i < n; i +=Max)
{
if(!vis[i])
{
vis[i] = 1;
printf(" %d",a[i]);
cnt ++;
}
}
printf("\n");
}
}
return 0;
}