您的位置:首页 > 其它

UVA 11100 The Trip, 2007

2012-11-09 23:44 405 查看
UVA_11100

首先,pieces的数目是取决于出现的次数最多的数的,出现次数最多的数的出现次数就是pieces的数目。

剩下还要保证每个pieces里面盒子数的最大值要尽量小,那么可以直接将盒子按大小排序,然后将每个盒子按1,2,...,n,1,2,...n...的顺序依次放到每个piece中,就可以构造出一个符合题意的放置方案了,其中n表示pieces的数目。

#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
#define MAXN 10010
int a[MAXN], N;
void input()
{
for(int i = 0; i < N; i ++) scanf("%d", &a[i]);
std::sort(a, a + N);
}
void process()
{
int cur = 0, n = 0;
std::vector<int> b[MAXN];
while(cur < N)
{
int pre = cur;
while(cur < N && a[cur] == a[pre]) ++ cur;
n = std::max(n, cur - pre);
}
for(int i = 0; i < N; i ++) b[i % n].push_back(a[i]);
printf("%d\n", n);
for(int i = 0; i < n; i ++)
{
printf("%d", b[i][0]);
for(int j = 1; j < b[i].size(); j ++) printf(" %d", b[i][j]);
printf("\n");
}
}
int main()
{
int t = 0;
while(scanf("%d", &N), N)
{
input();
if(t ++) printf("\n");
process();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: