|
|
发表于 2020-3-16 17:30:03
|
显示全部楼层
难度评级:普通
要素分析:模拟 循环 逻辑
代码:- 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为列表长度,因为我不确认我的解法是否绝对正确,所以无法给出正解的对照答案,请参照确认正解的答案。 |
评分
-
查看全部评分
|