我遇到了一个已经解决了几天的问题。
在所需加油量的队列中,有N辆汽车在加油站(A [])等待,有3个加油机(X,Y,Z)的加油量受到限制。 1升油需要1秒。汽车瞬间移动。假设汽车的燃料需求为D,则汽车应前往至少提供D升或等待的加油机。如果所有分配器都没有被占用,则汽车按字母顺序转到第一个。 当任何汽车将无法再加油时,返回-1。
例如X = 7,Y = 11,Z = 13和A = [2,8,4,3,2]
在时间0 car0驱动到X,car1驱动到Y Z中没有足够的燃油供car2使用,因此它等待 在time2 car0完成加油,car 2开车到加油机X 在时间2,car3开车到点胶机Z 所有分配器都被占用,所以car4等待 当car2和car3离开时,X和Y中没有足够的汽油供car4使用,因此car4等到car1完成加油。 在time8,汽车4驶向分配器Y。
maxwait = 8
灵感:一直工作到时间2,但我无法跟踪哪辆车正在哪个加油机加油。
def solution(A,X,Y,Z):
station = {
'X':True,
'Y':True,
'Z':True
}
t=0
for y in range(100):
t+=1
for i in range(len(A)):
if A[i]<=X and station['X']:
A[i]-=1
station['X']=False
X-=1
elif A[i]<=Y and station['Y']:
A[i]-=1
Y-=1
station['Y']=False
elif A[i]<=Z and station['Z']:
A[i]-=1
Z-=1
station['Z']=False
else:
break
答案 0 :(得分:0)
在“示例X = 7,Y = 11,Z = 13和A = [2,8,4,3,2]”中,看起来13应该是3 下面的代码可用于该示例和某些其他情况,不确定是否可以涵盖所有需要的方案。
def calculateMaxTime(A,X,Y,Z):
dispensers = [X, Y, Z]
#occupied is each dispenser's serving time before car i
occupied =[0,0,0]
K=3
for i in range(len(A)):
startIndex = occupied.index(min(occupied))
#print("startIndex: ",startIndex, " occupied: ", occupied)
count = 0
for j in range(K):
idx = (startIndex+j)%K
if(A[i] <= dispensers[idx]):
if i == len(A)-1:
return occupied[idx];
occupied[idx] += A[i]
dispensers[idx] -= A[i]
break
else:
count += 1
if count == K:
return -1
print("[2,8,4,3,2], 7, 11, 3, waiting time: ", calculateMaxTime([2,8,4,3,2], 7, 11, 3))
print("[2,8,3,3,2], 7, 11, 3, waiting time: ",calculateMaxTime([2,8,3,3,2], 7, 11, 3))
print("[2,8,4,3,2,1,2], 7, 11, 3, waiting time: ", calculateMaxTime([2,8,4,3,2,1,2], 7, 11, 3))
print("[8,2,4,3,2,1,1], 7, 11, 3, waiting time: ", calculateMaxTime([8,2,4,3,2,1,1], 7, 11, 3))
任何评论/更正均受到高度赞赏。