练习
题目来源(公众号:万诺coding)
题目内容
新年即将来临,小明计划开新买的电动汽车回老家过年。
已知小明的工作地在上海,老家在中部某城市A。上海到城市A的距离是L公里(1<=L≤100000)。
小明的电动汽车的电池航程是P,电池最大电量也是P(假设电动汽车行使一公里需要消耗1度电。(1<=P<=100))。如果电动车在中途电量耗尽了,将无法继续强行,也就无法到达目的地了。
已知小明出发前已经把电池充满了。途中依次经过N(1<=N<10000)个充电站。第i个充电站距离城市A有 Ai公里,最大可充电 Bi度。
请问,小明能不能顺利地回老家过年?如果可以,请输出最少需要充电多少次;如果不可以,请输出-1。
解答要求
时间限制: C/C++ 1000ms, 其他语言: 2000ms内存限制: C/C++ 256MB,其他语言: 512MB
输入
输入的第一行为数字N。
接下来的N行,每行包含2个数并用空格隔开: Ai Bi
最后一行包括两个数LP,并用空格隔开。
输出
按照题目要求输出最少次数或者-1。
class NODE():
def __init__(self,val=None,dis = None, locn = None,addNum = None, ln=None,rn=None):
self.value = val
self.distance = dis
self.locNum = locn
self.addNum = addNum
self.leftnode = ln
self.rightnode = rn
L=25
P=10
A = [4,5,11,15]
A.reverse()
A.append(0)
A = [L]+A
B = [4,5,6,8,0]
B.reverse()
locNum = len(A)-1
head = NODE(10,25,0,0)
nodelist = [head]
tmplist = []
while len(nodelist)!=0:
node = nodelist.pop(0)
if node.value<0:
continue
if node.locNum == locNum:
tmplist.append(node.addNum)
continue
nowP = node.value
nowDis = node.distance
addP = B[node.locNum]
nextDis = A[node.locNum+1]
node.leftnode = NODE(nowP-nowDis+nextDis,nextDis,node.locNum+1,node.addNum)
node.rightnode = NODE(nowP-nowDis+nextDis+addP,nextDis,node.locNum+1,node.addNum+1)
nodelist.append(node.leftnode)
nodelist.append(node.rightnode)
print(min(tmplist))