我一直试图在spoj上解决http://www.spoj.com/problems/MATGAME/这个问题。 使用sprague grundy定理可以解决这个问题。计算每行的sprague Grundy Number,如果这些值的XOR(^)为0,则第二个玩家首先获胜。 我不明白如何获得每行的grundy数字。
答案 0 :(得分:0)
一般感知
如果第一个数字大于第二个数字,那么该行的Grundy值是第一个数字,否则Grundy是第一个数字 - 。
伪代码看起来像:
ans := 0
for i from 1 to N
temp := 0
for j from M down to 1
if temp is greater or equal to val[i,j]
temp := val[i,j] - 1
else
temp := val[i,j]
end if
end for
ans := ans ^ temp
end for
if ans is equal to 0
print SECOND
else
print FIRST