题意:求最少有几个箱子,小的可以套在比他大的,很容易发现最小的箱子个数就是最多的型号重复个数,因为它可以装在比它大的,或者装下小的,不然就是自己一个,所以结果就是这样的了,输出序列个数的最小值k和这k个序列
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int cmp(int a,int b)
{
return a < b;
}
int main()
{
int n,arr[10005],Max,sum;
int t = 0;
while (scanf("%d",&n) != EOF && n)
{
if (t++)
printf("\n");
for (int i = 0; i < n; i++)
scanf("%d",&arr[i]);
sort(arr,arr+n,cmp);
Max = 1,sum = 1;
for (int i = 1; i < n; i++)
{
if (arr[i] == arr[i-1])
sum++;
else sum = 1;
if (sum > Max)
Max = sum;
}
printf("%d\n",Max);
for (int i = 0; i < Max; i++)
{
for (int j = i; j < n; j += Max)
{
printf("%d",arr[j]);
if (j + Max < n)
printf(" ");
}
printf("\n");
}
}
return 0;
}