取石子(一)
3000 ms | 内存限制: 65535
2
第一行是一个正整数n表示有n组测试数据
输入有不到1000组数据,每组数据一行,有两个数N和M,之间用空格分隔。
输出
对于每组数据,输出一行。如果先取的TT可以赢得游戏,则输出“Win”,否则输出“Lose”(引号不用输出)
样例输入
2 1000 1 1 100
样例输出
Lose Win
来源 经典题目
上传者 张云聪
思路:
巴什博奕,总数为n,每次最大取值为m,利用公式
n = k * (1 + m) + r (0 <= r <= m), 如果 r != 0, 那么先手必赢!策略如下:
当 r != 0 时: 首先先手报r个,那么剩下k倍(1+m)个数,那么我们每次报数1+m-k(B)个数就一定能保证最后剩下1+m个,此时,无论后手报几个,都会输!
当 r = 0 时, 与上面相反,后手一定会赢!
代码:
1. #include <iostream>
2.
3. using namespace std;
4.
5. int main()
6. {
7. int k;
8. cin >> k;
9. while(k --){
10. int n, m;
11. cin >> n >> m;
12. if(n % (m + 1) == 0)
13. "Lose" << endl;
14. else
15. "Win" << endl;
16. }
17.
18. return 0;
19. }