问题描述
Qns
您有一个并行化的程序,并使用?个独立线程来处理given的给定列表 职位。线程按照输入中给定的顺序接受作业。如果有空闲线程,则立即 从列表中接下一份工作。如果线程已开始处理作业,则不会中断或停止 直到完成处理工作为止。如果多个线程尝试同时从列表中获取作业,则 具有较小索引的线程将承担这项工作。对于每项工作,您确切知道任何线程将花费多长时间 来处理这项工作,并且所有线程这次都相同。您需要确定每个工作 哪个线程将处理它,何时开始处理。 输入格式。输入的第一行包含整数?和?。 第二行包含?个整数??-任何线程处理第?个作业所花费的时间(以秒为单位)。 时间以与线程从中接收作业的列表中的顺序相同的顺序给出。 线程从0开始索引。
约束。 1≤?≤105 ; 1≤?≤10 ^ 5 ; 0≤??≤10 ^ 9。
输出格式。精确输出?行。第?行(使用从0开始的索引)应包含两个以空格分隔的整数—线程的从0开始的索引,它将处理第?个作业和时间 在几秒钟内它将开始处理该作业。
做什么:- 考虑当一个线程空闲时的事件顺序(在开始时和之后 完成一些工作)。如何应用优先级队列来模拟所需事件中的这些事件 订购?记住要考虑几个线程同时变为空闲的情况。
示例输入:
2 5
1 2 3 4 5
输出:
0 0
1 0
0 1
1 2
0 4
我的方法
from queue import PriorityQueue
nm=input().split()
n=int(nm[0])
q=PriorityQueue()
task=[int(i) for i in input().split()]
ans=[-1 for i in range(len(task))]
for i in range(n):
q.put((task[i],i))
ans[i]=[i,0]
for i in range(n,len(task)):
tmp=q.get()
threadName=tmp[1]
time=tmp[0]
ans[i]=[threadName,time]
q.put((time+task[i],threadName))
for i in ans:
print(i[0],i[1])
我无法在代码中发现任何错误,但仍然无法通过所有测试用例。请帮助找到我错过的情况或代码中的任何错误
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)