题目描述:
在我们所知的一些高层建筑中(如迪拜塔),它的每层面积随着高度的增大而减小。在现代化的建设中,采用模块化建设可以简化建筑过程并减少工期。我们假定我们将要建筑一幢高 N 层的大楼,采用模块化建设(每一层为一个模块),每一天会运来其中一个模块。但由于调度上的失误,导致当天运来的模块并不一定是放在最下面的,这种情况下那一天就不会进行任何建设,而是要等到下层都建设好以后这一层的模块才会放上去。为简化问题,我们假定上一层的面积比下一层小 1。
输入描述:
每一组数据包含两行,第一行为一个非零正整数 N (1 <= N <= 100000)。
第二行为 N 个数, 第 i 个数代表第 i 天运来的模块面积, 1 <= ai <= N,且这 N 个数不会重复。
输出描述:
输出 N 行,每一行为当天的工程进度,输出当天建设的那几个面积层,从大到小排列,以空格隔开。
如当天没有进行任何建设,则输出一个空行。
示例:
输入:
1
3
3 1 2
输出:
3
2 1
解题思路:
先建立一个大小为 N 的数组 out,全部标记为 False。遍历输入的 N 个数,每次将一个输入的数加入到 out 数组的对应位置,并标记为 True。接下来,循环判断当前期望输出的值 expect 是否在 out 数组中 (被标记为 True),则打印 expect,并减 1 继续判断;否则,就打印一个空行。
Python 实现:
def solve(N, li):
out = [False] * (N + 1)
expect = N
for k, v in enumerate(li):
out[v] = True
while out[expect]:
print(expect, end=" ")
expect -= 1
else:
print()
N = int(input()) # 6
li = [int(n) for n in input().split(" ")] # 4 2 3 6 5 1
solve(N, li) # \n \n \n 6\n 5 4 3 2\n 1
网友评论