难度评级:普通
要素分析:模拟 循环 逻辑
代码:def solve(lst:'list of int>=0')->bool:
l = len(lst)
class Player:
def __init__(self,game):
self.game = game
self.point = 0
def choise(self):
nonlocal l
game = self.game
if not l:
return
if l <= 3:
self.point += game.pop(0) if game[0]>=game[-1] else game.pop()
else:
b1 = game[0]>game[-1]
b2 = game[1]>game[-2]
if b1 == b2:#同边
if b1:#左大
if game[0]+game[-2] < game[-1]+game[1]:
self.point += game.pop()
else:
self.point += game.pop(0)
else: #左小
if game[0]+game[-2] > game[-1]+game[1]:
self.point += game.pop(0)
else:
self.point += game.pop()
else: #异边
if b1:#外左大
self.point += game.pop(0)
else:
self.point += game.pop()
l -= 1
p1 = Player(lst)
p2 = Player(lst)
while lst:
p1.choise()
p2.choise()
return p1.point >= p2.point
if __name__ == '__main__':
print('示例1 输出:',solve([1,5,2]))
print('示例2 输出:',solve([1,5,233,7]))
附上一个输入数据随机生成器,送给有需要的人。>>> import random
>>> g = lambda m,n:[random.randint(0,m)for i in range(n)]
>>> g(5,10)
[2, 3, 0, 5, 3, 0, 0, 4, 4, 0]
>>>
其中,m参数为列表中出现的最大值,n为列表长度,因为我不确认我的解法是否绝对正确,所以无法给出正解的对照答案,请参照确认正解的答案。 |