//从题目可以肯定,最多的包裹数一定是同一种大小包裹数最多的一种。
//用multimap维护当前包裹数最多的大小。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <stack>
#define pii pair<int,int>
#define MP make_pair
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF,n)
{
map<int,int>::iterator it;
multimap<int,int>::reverse_iterator rit;
map<int,int>Map;
multimap<int,int>Map_index;
int Max=0;
for(int i=0;i<n;i++)
{
int temp;
scanf("%d",&temp);
Map[temp]++;
if(Map[temp]>Max)
Max=Map[temp];
}
for(it=Map.begin();it!=Map.end();++it)
Map_index.insert(MP(it->second,it->first));
printf("%d\n",Max);
bool flag=n%Max;
int s=n/Max+flag;
while(Max--)
{
stack<pii>stk;
int sum=1;
for(rit=Map_index.rbegin();rit!=Map_index.rend();++rit)
{
stk.push(*rit);
if(sum++>=s)
break;
}
while(!stk.empty())
{
pii now=stk.top();
stk.pop();
multimap<int,int>::iterator pos=Map_index.find(now.first);
for(pos;pos!=Map_index.end();++pos)
if(pos->second==now.second)
break;
Map_index.erase(pos);
printf("%d",now.second);
if(stk.empty())
putchar('\n');
else
putchar(' ');
pii next=now;
next.first--;
if(next.first)
Map_index.insert(next);
}
}
}
return 0;
}
uva11100
最新推荐文章于 2017-06-07 20:25:43 发布