博弈论入门
一、博弈论
博弈就是指游戏中的一种选择策略的研究,人们遵循一定规则的活动, 进行活动的人的目的是让自己“赢”。 要想赢得比赛 ,不但要考虑自己的策略, 还要考虑其他人的选择。 我们可以用搜索算法,按照题目条件筛选,列举出所有可能的情况,寻找胜利的策略;或是找寻规律后,简化算法,直接得到答案。
二、巴什博奕(Bash Game)
只有一堆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)的倍数,就能最后获胜。
但是如果一开始 n = (m+1)*r (r为任意自然数),先取者肯定会输,因为他第一次取不了m+1个,相反的,后取者可以保证之后每次给对手留下m+1的倍数,获得胜利。
三、例题
亚当和夏娃参加了今年的ACM国际大学编程比赛。昨晚,他们玩日历游戏,以庆祝这场比赛。本次比赛的日期为1900年1月1日至2001年11月4日,即比赛日。游戏从此间隔随机选择日期开始。然后,玩家,亚当和夏娃,轮流移动与亚当移动第一:亚当,夏娃,亚当,夏娃等。移动只有一个规则,它很简单:从当前日期开始,轮到他/她的玩家可以移动到下一个日历日期或下个月的同一天。当下个月没有同一天时,玩家只移动到下一个日历日期。例如,从 1924 年 12 月 19 日起,您可以移动到 1924 年 12 月 20 日、下一个日历日期或 1925 年 1 月 19 日,即下个月的同一天。但是,从 2001 年 1 月 31 日起,您只能移动到 2001 年 2 月 1 日,因为 2001 年 2 月 31 日无效。
当玩家正好到达 2001 年 11 月 4 日的日期时,他/她将赢得
比赛。如果玩家在 2001 年 11 月 4 日之后移动到日期,他/她将失去游戏。
编写一个程序,决定在初始日期,第一推动者 Adam 是否有获胜
策略。
对于这个游戏,你需要确定闰年,其中2月有29
天。在公历中,闰年发生在四年完全可分割的年份。因此,1993年、1994年和1995年不是闰年,而1992年和1996年是闰年。此外,以 00 结尾的年数只有可除以 400 年才能闰年。因此,1700年、1800年、1900年、2100年和2200年不是闰年,而1600年、2000年和2400年不是闰年。
Input
输入由 T 测试案例组成。测试案例 (T) 的数量在输入的第一行中给出。每个测试案例都以一行方式书写,与初始日期相对应。一行中的三个整数,YY MM DD,表示YY年当月DD-第1天。请记住,初始日期是从 1900 年 1 月 1 日至 2001 年 11 月 4 日期间随机选择的。
Output
为每个测试案例打印一行。对于亚当是否对夏娃有获胜策略的问题, 这条线应该包含 “是” 或 “否” 的答案。由于我们有T测试案例,您的程序应完全输出T行的"是"或"否"。
Sample Input
3
2001 11 3
2001 11 2
2001 10 3
Sample Output
YES
NO
NO