题目
输入
第一行是一个正整数n表示有n组测试数据。
输入有不到1000组数据,每组数据一行,有两个数N和M,之间用空格分隔。
输出
对于每组数据,输出一行。如果先取的TT可以赢得游戏,则输出“Win”,否则输出“Lose”(引号不用输出)。
解题思路
这题属于取石子问题,是简单的博弈论。
1、最先把石子取完者胜利,最多取M个,假设总共有M+1个,则无论先取的人怎么取,都无法胜利。如果要保证先取的人必胜,那第K次(最后一次)先取的人取石子时,剩下的石子数量应该小于等于M,这样K-1次对手取石子的时候就要保证石子数量大于M。
2、假设总共n=(M+1)×r+s,先手取s个,然后对手取k个(k>=M),然后先手取(M+1)-k个,这样剩下的石子数量为(M+1)×(r-1);以后每次都这样取石子,一直保持给对手留下的石子数量是M+1的倍数的石子,就能取得胜利。
3、根据以上分析,可以知道n%(m+1)!=0的时候先手一定能赢。
参考代码
#include<stdio.h>
int main(){
int a,n,m;
scanf("%d",&a);
while(a--){
scanf("%d %d",&n,&m); //数量
if(n%(m+1)==0)
printf("Lose\n");
else
printf("Win\n");
}
return 0;
}