题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=135
这道题为巴什博弈和尼姆博结合题。
巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物, 规定每次至少取一个,最多取m个。最后取光者得胜。
显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。
尼姆博弈:有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
各堆的总数异或的到的数是否为零, 为零必败, 否者必胜。
对这道题来说, 要想赢的话就是每堆剩下的都是最优的数目,然后使用尼姆博弈对每堆数字进行异或运算
#include<stdio.h>
int Mod(int a, int b)
{
return a % (b+1);
}
int main()
{
int T, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
int s = 0;
while(n--)
{
int a, b;
scanf("%d%d", &a, &b);
s ^= Mod(a, b);
}
if(s)
puts("Win");
else
puts("Lose");
}
return 0;
}