軟件開(kāi)發(fā)需要多久網(wǎng)站優(yōu)化有哪些技巧
題目描述
一個(gè)荒島上有若干人,島上只有一條路通往島嶼兩端的港口,大家需要逃往兩端的港口才可逃生。
假定每個(gè)人移動(dòng)的速度一樣,且只可選擇向左或向右逃生。
若兩個(gè)人相遇,則進(jìn)行決斗,戰(zhàn)斗力強(qiáng)的能夠活下來(lái),并損失掉與對(duì)方相同的戰(zhàn)斗力;若戰(zhàn)斗力相同,則兩人同歸于盡。
輸入描述
給定一行非 0 整數(shù)數(shù)組,元素個(gè)數(shù)不超過(guò)30000;
正負(fù)表示逃生方向(正表示向右逃生,負(fù)表示向左逃生),絕對(duì)值表示戰(zhàn)斗力,越左邊的數(shù)字表示里左邊港口越近,逃生方向相同的人永遠(yuǎn)不會(huì)發(fā)生決斗。
輸出描述
能夠逃生的人總數(shù),沒(méi)有人逃生輸出0,輸入異常時(shí)輸出-1。
用例1
輸入
5 10 8 -8 -5
輸出
2
說(shuō)明
第3個(gè)人和第4個(gè)人同歸于盡,第2個(gè)人殺死第5個(gè)人并剩余5戰(zhàn)斗力,第1個(gè)人沒(méi)有遇到敵人。
nums = list(map(int,input().split()))
#本質(zhì)上是一個(gè)棧的問(wèn)題
def getresult():negative = 0 #從左邊出來(lái)的負(fù)數(shù)的個(gè)數(shù)intnums = []for num in nums:if num==0:return -1if num>0:intnums.append(num)else:while True:if len(intnums)==0:negative+=1breakdif = num+intnums.pop()if dif>0:intnums.append(dif)breakelif dif<0:num=difelse:breakreturn negative+len(intnums)
print(getresult())