Circle Game (Codeforces 1695B)
Tags: Greedy, games

Mike and Joe are playing a game with some stones. Specifically, they have $$$n$$$ piles of stones of sizes $$$a_1, a_2, \ldots, a_n$$$. These piles are arranged in a circle.The game goes as follows. Players take turns removing some positive number of stones from a pile in clockwise order starting from pile $$$1$$$. Formally, if a player removed stones from pile $$$i$$$ on a turn, the other player removes stones from pile $$$((i\bmod n) + 1)$$$ on the next turn.If a player cannot remove any stones on their turn (because the pile is empty), they lose. Mike goes first.If Mike and Joe play optimally, who will win?

Input: Each test contains multiple test cases. The first line contains the number of test cases $$$t$$$ ($$$1 \le t \le 1000$$$). Description of the test cases follows.The first line of each test case contains a single integer $$$n$$$ ($$$1 \le n \le 50$$$)  — the number of piles.The second line contains $$$n$$$ integers $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \le a_i \le 10^9$$$)  — the size of the piles.

Output: For each test case print the winner of the game, either "Mike" or "Joe" on its own line (without quotes).

Note: In the first test case, Mike just takes all $$$37$$$ stones on his first turn.In the second test case, Joe can just copy Mike's moves every time. Since Mike went first, he will hit $$$0$$$ on the first pile one move before Joe does so on the second pile.

Sample Inputs:
2
1
37
2
100 100

Sample Outputs:
Mike
Joe

Solution (Python):
t = int(input())
while t > 0:
    n = int(input())
    l = list(map(int, input().split()))
    mike = []
    joe = []
    if n % 2 != 0:
        print('Mike')
    else:
        min_index = 0
        for i in range(n):
            if l[i] < l[min_index]:
                min_index = i
        if min_index % 2 != 0:
            print('Mike')
        else:
            print('Joe')
    t -= 1

Solution (Python):
I = input
for _ in range(int(I())):
    n = int(I())
    a = [*map(int, I().split())]
    print(['Joe', 'Mike'][n & 1 or a.index(min(a)) & 1])

Solution (Python):
import sys
input = sys.stdin.readline
import math
''
t = int(input())
for _ in range(t):
    n = int(input())
    a = list(map(int, input().split()))
    if n % 2 == 1:
        print('Mike')
    else:
        ind = a.index(min(a))
        if (ind + 1) % 2 == 0:
            print('Mike')
        else:
            print('Joe')