のgrundy数を求めることを考えます.
~のgrundy数はです.以降のgrundy数は以下で求めることができます.
の小さい方から順にこれを求めて行くことで,のgrundy数をで求めることができます.
参考コードは以下です.
xxxxxxxxxx
def mex(l):
ret = 0
for e in sorted(l):
ret += ret == e
return ret
n, m = map(int, input().split())
grundy = [0]*(2*m)
for i in range(2*m, n+1):
sprague = []
for l in range(m, i):
r = i - l
if l > r: break
sprague.append(grundy[l]^grundy[r])
grundy.append(mex(sprague))
print("Bob" if grundy[n] == 0 else "Alice")