NYOJ 23 —— 取石子(一)【博弈】

取石子(一)

时间限制:3000 ms  |  内存限制:65535 KB
描述
一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作石子。游戏的规则是这样的。设有一堆石子,数量为N(1<=N<=1000000),两个人轮番取出其中的若干个,每次最多取M个(1<=M<=1000000),最先把石子取完者胜利。我们知道,TT和他/她的室友都十分的聪明,那么如果是TT先取,他/她会取得游戏的胜利么?
 
输入
第一行是一个正整数n表示有n组测试数据
输入有不到1000组数据,每组数据一行,有两个数N和M,之间用空格分隔。
输出
对于每组数据,输出一行。如果先取的TT可以赢得游戏,则输出“Win”,否则输出“Lose”(引号不用输出)
样例输入
2
1000 1
1 100
样例输出
Lose
Win

分析:
  定义:f(n):= 当某个玩家面对n个石子时的最终的胜败情况(胜利:1, 失败:0)。如果f(x)=1,我们称x为必胜态,否则为必败态。
  1. 显然面对石子个数为0时的那个人输掉了,所以:f(0) = 0
  2. 由此,推算出上一步的话,f(1)=f(2)=...=f(m)=1
  3. 然后,我们会发现,f(m+1)=0,即:当面对m+1个石子时,因为必须要拿1~m个石子,所以一定会给对手m~1个石子,使对手进入必胜态,于是自己必败
  4. 接着,按照这个规律一直递推下去,会发现f(k(m+1)) = 0 (k=1,2...),其余均为必胜态。故,只需要判断n是否能整除m+1就能够判断面对n个石子的胜败情况了!

posted on 2016-04-01 01:14  SuperChan  阅读(157)  评论(0编辑  收藏  举报

导航