出现次数最多的数字的次数即为最少的答案,
只需要依次将序列按顺序分隔开即可,每组 (n/ans) 的长度
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 10010;
int n;
int a[maxn];
ll read(){ ll s = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9'){ s = s * 10 + ch - '0'; ch = getchar(); } return s * f; }
int main(){
int T = 0;
while(scanf("%d", &n) == 1 && n){
for(int i = 1 ; i <= n ; ++i){
scanf("%d", &a[i]);
}
if(T) printf("
");
T = 1;
sort(a + 1, a + 1 + n);
a[0] = -1;
int k = 0, mx = 0;
for(int i = 1 ; i <= n ; ++i){
if(a[i] != a[i - 1]){
k = 1;
mx = max(mx, k);
} else{
++k;
mx = max(mx, k);
}
}
printf("%d
", mx);
for(int i = 1 ; i <= mx ; ++i){
for(int j = i ; j <= n ; j += mx){
if(j != i) printf(" ");
printf("%d", a[j]);
} printf("
");
}
}
return 0;
}