|
12345678910111213141516171819202122232425262728 |
- import sys
-
-
- def game(stack1, stack2, rec=False, N=1):
- seen = set()
- key = None
- while stack1 and stack2:
- key = (tuple(stack1), tuple(stack2))
- a, b = stack1.pop(), stack2.pop()
- if rec and key in seen:
- return 0
- elif rec and a <= len(stack1) and b <= len(stack2):
- p2won = game(stack1[-a:], stack2[-b:], rec=rec, N=N + 1)
- else:
- p2won = b > a
- seen.add(key)
- winner = stack2 if p2won else stack1
- order = [a, b] if p2won else [b, a]
- winner[:] = order + winner
- return sum(i * n for i, n in enumerate(winner, 1)) if N == 1 else p2won
-
-
- text = sys.stdin.read()
- p1, p2 = text.split('\n\n')
- stack1 = [int(n) for n in p1.splitlines()[1:]][::-1]
- stack2 = [int(n) for n in p2.splitlines()[1:]][::-1]
- print(game(stack1[:], stack2[:]))
- print(game(stack1[:], stack2[:], rec=True))
|