Python保安巡逻问题 求解

小明有一块价值连城的钻石,有一次他把钻石送去展览,但是为了防止钻石被盗,所以他雇佣了很多保安来确保安全,所以他就要判断当前的排班情况是否符合要求。现在己知每天展览开放的时间为 12 时至 24 时,要保证在每天的任何一个时段同时巡逻的保安人数不能少于m人,而小明一共雇佣了n 名保安,每名保安都有各自的巡逻时间Fai,bil (ai 和bi都为12-24 之间的整数,也就是都从整点巡逻到整点),请你检查一下当前输入的巡逻方案能不能满足要求,如果可以的话输出”yes”,并输出同时巡逻人数最多的时刻的人数为多少;如果不可以的话输出”no”,并输出同时巡逻人数最小的时刻的人数为多小。
输入格式:
第一行输入一个正整数m,表示任何一个时段需要同时巡逻的人数
第二行输入一个正整数n,表示总共的保安人数
之后的 2n 行,分别按输入n 名保安各自的巡逻开始时问、结束时间。比如先输入第一名的开始时间 a1,然后是第一名的结束时间 b1,之后是第二名的开始时间 a2,再是第二名的结束时间 b2,以此类推
输出格式:
第一行,输出”yes”或〞no”,表示该方案能否满足要求
第二行,输出一个正整数,根据情况输出同时最多巡逻的人数或是同时最少巡逻的人数。

用一个列表或字典统计每个时间巡逻的人数即可
你题目的解答代码如下:

m = int(input())
n = int(input())
dic = {x:0 for x in range(12,25)}
for i in range(n):
    a,b = map(int,input().split())
    for j in range(a,b+1):
        dic[j] += 1
if all(map(lambda x: x>=m, dic.values())):
    print('yes')
    print(max(dic.values()))
else:
    print('no')
    print(min(dic.values()))

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

def BA_q(m,inlist):
    main=[0 for i in range(12)]
    for i in inlist:
        for k in range(i[0],i[1]):
            main[k-12]+=1
    for i in main:
        if i<m:
            return 'no',min(main)
    return 'yes',max(main)

li=[]
m=int(input('m:'))
n=int(input('n:'))#
for i in range(n):
    a=int(input())
    b=int(input())
    li.append((a,b))
a,b=BA_q(m,li)
print(a,b,sep='\n')



m=int(input())
n=int(input())
time={12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0}
for i in range(n):
    start=int(input())
    end=int(input())
    for j in range(start,end+1):
        time[j]+=1
for key in time.keys():
    if time[key]<m:
        print('no')
        break
else:
    print('yes')
    time_sort=sorted(time.items(),key=lambda x:x[1], reverse=False)
    print(time_sort[0][1])
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632