11Y
T^T
一开始想直接构造就好了
来个数组v[1000010]来记录每个值出现次数
结果一直WA
才发现这样没法平衡每个包的数量,就一只wa
然后看了眼题解
发现排序隔res输出就好
= =
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *aa,const void *bb)
{
int *a=(int *)aa;
int *b=(int *)bb;
return *a-*b;
}
int v[10010];
int a[10010];
int main(){
int n;
while(scanf("%d",&n)!=EOF&&n){
int i,j;
for(i=1;i<=n;i++)scanf("%d",&a[i]);
for(i=1;i<=n;i++)v[i]=0;
qsort(&a[1],n,sizeof(int),cmp);
a[0]=-1;a[n+1]=-1;
int pv=1;
int temp=a[1];
for(i=1;i<=n;i++){
if(a[i]==temp){
v[pv]++;
}
else {
temp=a[i];
++pv;
v[pv]++;
}
}
int res=0;
for(i=1;i<=pv;i++){
// printf("%d ",v[i]);
if(v[i]>res)res=v[i];
}
printf("%d\n",res);
for(i=1;i<=res;i++){
int fi=1;
for(j=i;j<=n;j+=res){
if(fi)fi=0;
else printf(" ");
printf("%d",a[j]);
}
printf("\n");
}
}
return 0;
}
输出格式注意下
in:
2 1 1
2 1 2
0
out:
2
1
1
1
1 2