题目大意:
有几个包裹,包裹之间是有互相包含关系的,求最少的箱子数可以将所有包裹都放进去。
思路:
最多的重复个数k就需要几个箱子,因为相同的之间是不可以相互包含的。将包裹进行排序,然后从一个数i,每加K就是放在同一个箱子中的,照着这个样子输出就可以了。
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<string>
using namespace std;
const int maxn = 10005;
int arr[maxn];
int main() {
int n,i,j;
while(scanf("%d", &n) && n) {
for(i=0; i<n; i++) {
scanf("%d", &arr[i]);
}
sort(arr,arr+n);
int count=1, mc=0;
for(i=0; i<n-1; i++) {
if(arr[i]==arr[i+1]) {
count++;
}
else {
count=1;
}
if(mc<count) mc=count;
}
printf("%d\n",mc);
for(i=0; i<mc; i++) {
printf("%d",arr[i]);
for(j=i+mc; j<n; j+=mc) {
printf(" %d",arr[j]);
}
printf("\n");
}
}
return 0;
}