电梯II——pythonOJ笔记

电梯II——pythonOJ笔记

题面描述:
新建的思源楼高达200层,构成了交大新的地标。楼里面有一部可以通达所有楼层的电梯,每上一层楼需要u秒钟,下一层楼需要d秒,每个楼层会停s秒。目前电梯在第N(1 \le N \le 200)N(1≤N≤200)层的地面上。若某个楼层没有上下需求,则电梯运行中会跳过该楼层。电梯沿某个方向运行到该方向最后一个需要上下人的楼层后,若下方或上方没有请求但另一方方向有用梯需求,则转向运行。若电梯不需要上下运行,则会忽略该请求。现有若干个楼层需要上下人,则满足这些请求最少需要耗费多长时间(包括最后的停留时间)?

输入:
输入数据有若干组(最多不超过1000组),每组数据的第一行为四个如题目中所示的整数N, u, d, s,由空格分隔开。第二行为不同楼层需要上下楼的请求, 最多不超过1000个。每个请求的格式为"from-to",其中"from"和"to"为所在楼层和要到达的楼层,保证from 不等于to。

输出:
对每组测试数据,在单独的行中输出结果。先输出当前测试样例的组号Case c:,随后在同一行中输出满足这些请求最少需要消耗的时间。

示例输入:
1 6 4 5
1-3 2-3 5-6 8-10 5-4
2 6 4 5
1-3 2-3 5-6 8-10 5-4
11 6 4 5
1-3 2-3 5-6 8-10 5-4
7 6 4 5
1-3 2-3 5-6 8-10 5-4
8 6 4 5
1-3 2-3 5-6 8-10 5-4
8 6 4 5
1-3 2-3 5-6 8-10 5-4 2-3 1-3

示例输出:
Case 1: 118
Case 2: 127
Case 3: 139
Case 4: 123
Case 5: 118
Case 6: 118

思路:
将问题的主体定位在电梯,电梯的动作空间仅仅有:上、下、等三个动作,因此可以将输入不同数字的个数作为等待的次数,上、下动作的区间就可以通过用户需求的最高楼层和最低楼层作差得到。

其次,需要考虑电梯开始向上或者向下,可以对通过该方向的需求总数、再次回到原来位置的时间预期等标准对作一个评价函数。由于时间宽松,可以直接求得两个方向时间求最小值即可。
主要功能函数

def find_the_limit(comd):#寻找电梯运动的上下节点
    if len(comd) == 0:
        return 0, 0, 0
    dic = []
    for i in comd:
        t = i.split('-')
        dic.append(t[0])
        dic.append(t[1])
    dic = list(set(dic))
    dic = [int(i) for i in dic]
    dic.sort()
    return dic[0], dic
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值