美文网首页
建楼问题

建楼问题

作者: 牛奶芝麻 | 来源:发表于2019-04-05 22:49 被阅读0次
    题目描述:

    在我们所知的一些高层建筑中(如迪拜塔),它的每层面积随着高度的增大而减小。在现代化的建设中,采用模块化建设可以简化建筑过程并减少工期。我们假定我们将要建筑一幢高 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
    

    相关文章

      网友评论

          本文标题:建楼问题

          本文链接:https://www.haomeiwen.com/subject/uixliqtx.html