首页 > 试题广场 >

游泳池-研发

[编程题]游泳池-研发
  • 热度指数:2775 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解

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

现在小明想把这个行动升级,考验一下程序员,做了一个自动装置来控制给水管和排水管。在开始时,给水管和排水管都是打开状态的,并且游泳池里没有水。在自动装置的作用下,每经过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

输出

0
10
2
3
2495
细心模拟
T=int(input())
for _ in range(T):       #T组数据
    m, t, m1, t1, m2, t2=map(int, input().strip().split())
    intp,outp=True,True         #开始时给水管和排水管都是打开状态
    pool=0                      #开始时,泳池没有水
    for time in range(1,t+1):
        tmp=0                   #tmp记录本分钟的水增量(可能为负)
        if intp and outp:       #给水和排水同时打开 
            tmp=m1-m2  
        elif intp and not outp: #只有给水开
            tmp=m1 
        elif not intp and outp: #只有排水开
             tmp=-m2
        if pool+tmp<0:pool=0
        elif pool+tmp>m:pool=m 
        else:pool+=tmp
        if time % t1==0:        #经过t1分钟
            intp=not intp     
        if time % t2==0:        #经过t2分钟
            outp=not outp
    print(pool)


发表于 2021-08-20 21:26:55 回复(0)
for i in range(int(input())):
    m,t,m1,t1,m2,t2 = map(int,(input()).split())
    c1 = 0
    c2 = 0
    water = 0
    for j in range(t):
        if j%t1 == 0:
            c1 = 1-c1
        if j%t2 == 0:
            c2 = 1- c2
        water = water +(m1*c1-m2*c2)
        if water <=0:
            water = 0
        elif water >= m:
            water = m
    print(water)

发表于 2020-08-11 00:49:17 回复(0)