【面试题】网易互娱(游戏)2020校招在线笔试-游戏研发第一批[游泳池]

小明作为一个游泳池管理员,以玩弄给水管和排水管为乐,也因此产生了很多数学题考验小朋友。

现在小明想把这个行动升级,考验一下程序员,做了一个自动装置来控制给水管和排水管。在开始时,给水管和排水管都是打开状态的,并且游泳池里没有水。在自动装置的作用下,每经过t1分钟,给水管的状态都会改变,即从打开状态变为关闭状态或从关闭状态变为打开状态,而同时每经过t2分钟,排水管的状态也会改变。当给水管打开时,给水管每分钟会向游泳池里注入m1升水;当排水管打开时,排水管每分钟会把游泳池里水排走m2升;当给水管和排水管同时打开时,游泳池的水量变化为每分钟(m1-m2)升。当然泳池的水量不能变为负数,同时泳池也有个最大容量m,水量不能超过m升。那么经过t分钟后,游泳池里有多少升水?


输入描述:

输入第一行为一个正整数T,表示有T组数据。

每组数据的为一行包含六个整数,分别表示m, t, m1, t1, m2, t2。

数据范围:

对于所有数据,满足1<=T<=10, 1<=m<=100000, 1<=t<=86400, 1<=m1,m2<=100, 1<=t1,t2<=10。

输出描述:

对于每一个数据,输出一行,包括一个整数,为在t分钟后游泳池中的水量。

输入例子1:

5
10 2 1 5 2 5
10 2 10 5 2 5
10 2 3 5 2 5
100 100 3 4 4 3
10000 1000 10 5 5 3

输出例子1:

0
10
2
3
2495

首先读题后要明确一点,储水与放水是并行的两个相互独立的事件,也就是说,一共可能出现四种情形

情形1:储水闸开,放水闸开  记做 1 1

情形2:储水闸开,放水闸关  记做 1 0

情形3:储水闸关,放水闸开  记做 0 1

情形4:储水闸关,放水闸关  记做 0 0

从题干可知,时间以分钟为单位,也就是说,每分钟水池必然处在上述四种状态之一。

故可以将水池的变化量统一为一个公式  : 储水闸的状态*m1 - 关水闸的状态*m2

再考虑到水池最大容量为m  , 最小容量为0,则还需对当前容量(暂记为L)进行限制

l = m if l > m else max(0,l)

代码如下:

m = int(input())
data = []
 
 
for i in range(m):
    data.append(list(map(int, input().split())))
 
for i in range(m):
    m=data[i][0]                             #最大水量
    t = data[i][1]                           #经过t分钟
    m1 = data[i][2]                          #单位时间储水量
    t1 = data[i][3]                          #储水闸开房周期
    m2 = data[i][4]                          #单位时间排水量
    t2 = data[i][5]                          #排水闸开房周期
    res = 0                                  #当前储水量
    t1_doing = 0                             #储水闸状态
    t2_doing = 0                             #排水闸状态
    for i in range(t):
        if i% t1 ==0:                        #每到一个周期
            t1_doing = t1_doing^1            #进行一次异或运算(0^1=1,1^1=0)
        if i% t2 ==0:
            t2_doing = t2_doing^1
        res += t1_doing*m1 - t2_doing*m2     #上文提到的计算公式
        res= m if res>m else max(res,0)      #上文提到的储水限制
    print(res)

难度: 简单

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值