前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >建楼问题

建楼问题

作者头像
echobingo
发布2019-04-17 16:15:23
9310
发布2019-04-17 16:15:23
举报
题目描述:

在我们所知的一些高层建筑中(如迪拜塔),它的每层面积随着高度的增大而减小。在现代化的建设中,采用模块化建设可以简化建筑过程并减少工期。我们假定我们将要建筑一幢高 N 层的大楼,采用模块化建设(每一层为一个模块),每一天会运来其中一个模块。但由于调度上的失误,导致当天运来的模块并不一定是放在最下面的,这种情况下那一天就不会进行任何建设,而是要等到下层都建设好以后这一层的模块才会放上去。为简化问题,我们假定上一层的面积比下一层小 1。

输入描述:

每一组数据包含两行,第一行为一个非零正整数 N (1 <= N <= 100000)。 第二行为 N 个数, 第 i 个数代表第 i 天运来的模块面积, 1 <= ai <= N,且这 N 个数不会重复。

输出描述:

输出 N 行,每一行为当天的工程进度,输出当天建设的那几个面积层,从大到小排列,以空格隔开。 如当天没有进行任何建设,则输出一个空行。

示例:

输入:

代码语言:javascript
复制
1
3
3 1 2

输出:

代码语言:javascript
复制
3

2 1
解题思路:

先建立一个大小为 N 的数组 out,全部标记为 False。遍历输入的 N 个数,每次将一个输入的数加入到 out 数组的对应位置,并标记为 True。接下来,循环判断当前期望输出的值 expect 是否在 out 数组中 (被标记为 True),则打印 expect,并减 1 继续判断;否则,就打印一个空行。

Python 实现:
代码语言:javascript
复制
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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.04.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 输入描述:
  • 输出描述:
  • 示例:
  • 解题思路:
  • Python 实现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档