#BZOJ3965. Pyramids

Pyramids

No submission language available for this problem.

题目描述

如果你有足够的石块,那么建一座金字塔绝不算难事。举个例子,在一块平地上,我们铺一个10*10的矩形,然后在10*10的矩形上面铺一个9*9的,然后8*8的……以此类推,直到顶上1*1。这个金字塔有10层,我们称这类金字塔为“高金字塔”。
如果你认为这样的金字塔太陡了,那么我们有办法让他看上去坡度平缓一些。比如,在10*10的矩形上,我们铺一个8*8的矩形,然后是6*6的……这样的金字塔只有5层了,大约为底座边长的一半。我们称之为“矮金字塔”。
很久以前,一位法老从父亲那儿继承了一大堆用于搭建金字塔的石块。他决定用这些石块搭建一座金字塔——每个石块都必须用上。建筑师告诉他,这样的要求不一定能实现。例如,如果你有10块石头,那么可以搭一个底座为3的矮金字塔;如果有5块石头,那么就搭一个底座为2的高金字塔。如果你有7块石头呢?不幸的是,确实找不出一种搭金字塔的方案了。
思考再三后,法老决定放低要求——搭不止一座金字塔。但是仍然要满足如下几个条件:
1.所有石块都必须用上;
2.金字塔数要尽可能少;
3.所有金字塔两两不同;
4.金字塔至少包含两层,即底座为1的金字塔和底座为2的矮金字塔是不允许的;
5.满足以上4点的基础上,最大的金字塔要尽可能大(大定义为用的石块数多);
6.满足以上5点的基础上,次大的金字塔要尽可能大;
7.以此类推。。
你能求出最好的搭金字塔方案么?或者告诉法老这是做不到的。

输入格式

输入仅包含一行,一个正整数N(N<=10^6),表示你拥有的石块数量。

输出格式

输出需要给出具体的方案,或者告诉法老不可能办到。具体的,如果不能办到,输出impossible;否则输出每个金字塔如何搭建,格式是“底座长度+H/L”,H表示这是一座高金字塔,L表示矮金字塔。多座金字塔按从大到小排序输出,如果大小一样,先输出“高金字塔”。两座金字塔间用恰好一个空格隔开。

29
28
0
Case 1: 3H 3L 2H
Case 2: impossible

数据范围与约定

对于100%的数据,N<=1000000