Description
Pete和他的表哥进行比赛。有n堆石子,每堆石子有Ai个(1<=i<=n,Ai>=1),第i堆石子最多能取Li个(1<=i<=n,Li>=1).双方轮流从石子堆中任选一堆取,至少取1个,最多取Li个。最后取完石子的为胜。Pete先取,双方都采取最优策略。
Input
第一行是一个正整数t,表示有t组数据。每组数据的第一行是一个正整数n(n<=500),代表有n堆石子,然后有n行,每行有两个正整数Ai、Li,分别代表第i堆石子的数量和第i堆石子最多取的数量。
Output
对于每组数据,如果pete赢,则输出”Win”,否则输出”Lost”。
Sample Input
2
2
1 1
2 2
1
5 4
Sample Output
Win
Lost
题解:
此题是是在bash基础上的nimm. 由于nimm取石要求没有上限, 所以需要我们把此题稍作转化, 通过bash博弈思想, 对每堆石子取余, 使每堆石子数量不大于上限, 这样便使题目转化为nimm博弈模型了
#include <iostream>
using namespace std;
int t, n, per, perMax;
int main() {
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
int nimm = 0;
for (int i = 0; i < n; ++i) {
scanf("%d%d", &per, &perMax);
int bash = per%(1 + perMax);
nimm ^= bash;
}
printf("%s\n", nimm == 0 ? "Lost" : "Win");
}
return 0;
}