#P3287. The Trip, 2007
The Trip, 2007
题目描述
一群学生每年都会参加一个俱乐部的异国旅行。过去的旅行地点包括印第安纳波利斯、凤凰城、纳什维尔、费城、圣何塞、亚特兰大、埃因霍温、奥兰多、温哥华、檀香山、比佛利山庄、布拉格、上海和圣安东尼奥。今年春天,他们希望进行一次类似的旅行,但还不确定具体地点和时间。
旅行中的一个问题是,慷慨的赞助商总会送给他们各种背包和行李袋,他们必须在回家时打包这些袋子。由于航空公司对行李件数有限制,他们决定将袋子嵌套打包,以最小化必须携带的行李件数(即最外层袋子的数量)。
所有袋子的形状完全相同,仅线性尺寸不同(尺寸为不超过1000000的正整数)。较小尺寸的袋子可以嵌套在较大尺寸的袋子中。你的任务是计算如何将袋子嵌套打包,使得:
- 行李件数最少(即最外层袋子的数量最少);
- 在满足条件1的前提下,单个行李件中的袋子数量尽可能少。
输入格式
标准输入包含多个测试用例。每个测试用例包含:
- 第一行是一个整数 ( 1 \leq n \leq 10000 ),表示袋子的数量;
- 接下来一行或多行包含 ( n ) 个整数,表示每个袋子的尺寸;
- 输入以一行包含 ( 0 ) 的测试用例结束。
输出格式
对每个测试用例,输出:
- 第一行是最少行李件数 ( k );
- 接下来 ( k ) 行,每行列出一个行李件中从内到外的所有袋子尺寸(需满足嵌套条件,即尺寸严格递增);
- 每个输入中的尺寸必须在输出中恰好出现一次,且同一行李件中的袋子必须能嵌套(小尺寸在内,大尺寸在外);
- 若有多个解,输出任意一个即可;
- 测试用例之间用空行分隔。
输入数据示例 1
6
1 1 2 2 2 3
0
输出数据示例 1
3
1 2
1 2
3 2
来源
Waterloo Local Contest, 2006.9.24