刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!
简答题
38.过马路问题
在遥远的mars星球,即将入学的小精灵们正在学习过马路。它们需要请精灵学院的哥哥姐姐们的指导。
精灵学院共有C名学员(1≤C≤2000),编号为1...C,每名学员i愿意在时间Ti帮助小精灵。当前共有N名小精灵(1≤N≤2000),编号为1...N,其中小精灵j能够在时间Aj和时间Bj之间过马路。当前情况下,结伴过马路是最好的办法,每位小精灵j想找到一位学员i结伴过马路,i和j必须满足Aj≤Ti≤Bj。
每名学员最多只能结伴一名小精灵,每名小精灵最多结伴一名学员,请帮助计算可以得到的最大结伴数。
输入格式:
第一行输入包含C和N。
接下来C行包含T1 ... TC,
再接下来N行包含用于j = 1 ... N的Aj和Bj(Aj≤Bj)。 A,B和T都是不超过30000的正整数。
输入样例:
5 4
7
8
6
2
9
2 5
4 9
0 3
8 13
输出格式:
一共整数,表示精灵学院学员和小精灵的最大结伴数。
输出样例:
3
n,m= map(int, input().split())
t=[];a=[];b=[];h=[]
for i in range(1,n+1):
x=int(input())
t.append(x)
h.append(0)
for i in range(1,m+1):
① = map(int, input().split())
a.append(x)
b.append(y)
t. ②
for i in range(m-1):
for j in range(m):
if((a[i]>a[j]) or (a[i]==a[j] and b[i]>b[j])):
a[i],a[j]=a[j],a[i]
③
ans=0
for i in range(m):
for j in range(n):
if(t[j]>=a[i] and t[j]<=b[i] and h[j]==0):
④
h[j]=1
break
if(t[j]>b[i]):
break
print(ans)
在遥远的mars星球,即将入学的小精灵们正在学习过马路。它们需要请精灵学院的哥哥姐姐们的指导。
精灵学院共有C名学员(1≤C≤2000),编号为1...C,每名学员i愿意在时间Ti帮助小精灵。当前共有N名小精灵(1≤N≤2000),编号为1...N,其中小精灵j能够在时间Aj和时间Bj之间过马路。当前情况下,结伴过马路是最好的办法,每位小精灵j想找到一位学员i结伴过马路,i和j必须满足Aj≤Ti≤Bj。
每名学员最多只能结伴一名小精灵,每名小精灵最多结伴一名学员,请帮助计算可以得到的最大结伴数。
输入格式:
第一行输入包含C和N。
接下来C行包含T1 ... TC,
再接下来N行包含用于j = 1 ... N的Aj和Bj(Aj≤Bj)。 A,B和T都是不超过30000的正整数。
输入样例:
5 4
7
8
6
2
9
2 5
4 9
0 3
8 13
输出格式:
一共整数,表示精灵学院学员和小精灵的最大结伴数。
输出样例:
3
n,m= map(int, input().split())
t=[];a=[];b=[];h=[]
for i in range(1,n+1):
x=int(input())
t.append(x)
h.append(0)
for i in range(1,m+1):
① = map(int, input().split())
a.append(x)
b.append(y)
t. ②
for i in range(m-1):
for j in range(m):
if((a[i]>a[j]) or (a[i]==a[j] and b[i]>b[j])):
a[i],a[j]=a[j],a[i]
③
ans=0
for i in range(m):
for j in range(n):
if(t[j]>=a[i] and t[j]<=b[i] and h[j]==0):
④
h[j]=1
break
if(t[j]>b[i]):
break
print(ans)
使用微信搜索喵呜刷题,轻松应对考试!
答案:
解析:
首先,我们读取输入数据,包括学员数量C、小精灵数量N,以及每个学员的可用时间T和每个小精灵的过马路时间范围A和B。
然后,我们初始化学员和小精灵的时间列表t、a和b,并将它们分别填充为输入数据。
接下来,我们对学员和小精灵的时间进行排序。对于学员,我们按照时间T进行排序;对于小精灵,我们按照开始时间A进行排序,如果A相同,则按照结束时间B进行排序。
然后,我们遍历每个学员,对于每个学员,我们遍历每个小精灵,检查小精灵的时间是否在学员的可用时间内,并且小精灵没有被其他学员选中。如果是,我们将小精灵标记为被选中,并找到时间最早的被选中的小精灵。最后,我们输出被选中的小精灵的数量加1。
需要注意的是,在检查小精灵的时间是否在学员的可用时间内时,我们需要确保小精灵的开始时间A小于等于学员的可用时间T,并且小精灵的结束时间B大于等于学员的可用时间T。如果小精灵的结束时间B大于学员的可用时间T,则我们不再考虑该学员。
另外,在遍历小精灵时,我们需要确保小精灵没有被其他学员选中,否则我们不再考虑该小精灵。
最后,我们输出被选中的小精灵的数量加1,因为在题目中要求输出的是精灵学院学员和小精灵的最大结伴数,而小精灵的数量就是最大结伴数。
注意,上述代码只是一个可能的实现方式,并不是唯一正确的实现方式。在实际编程中,我们需要根据题目的具体要求和输入数据的特性,选择最适合的算法和数据结构,以及最优的实现方式。
创作类型:
原创
本文链接:38.过马路问题在遥远的mars星球,即将入学的小精灵们正在学习过马路。它们需要请精灵学院的哥哥姐姐
版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!



