黄金游戏
Atlantis Island
题目描述:
Atlantis Island沉没以前,传说中的猫老大和King是好朋友……King很喜欢赌博,这次King和老朋友猫老大多年不见,于是便邀请猫老大来玩一个游戏,猫老大应邀参加了。King拿出了n块黄金(0<n<10^1000002),猫老大暗自想:咋来这么多钱的……,现在King和猫老大轮流从黄金中拿走一些,每人每次拿走的块数是2的次方(例如1,2,4,8,16……)谁能拿走最后一个黄金,谁就获胜。现在King让猫老大先拿,双方都使用最好的策略来玩的话,谁能取得胜利呢?
现在请你来帮助猫老大,他能胜利吗?
输入格式:
一行一个数n(0<n<10^1000002)。
输出格式:
第一行:如果King必胜则输出“King will win.”;否则输出“MaoLaoDa will win.”。
如果是猫老大必胜的话,则再在第二行输出他第一次拿的数量,输出最小值。
样例输入:
[样例1] atlantis.in 8 [样例2] atlantis.in 3
样例输出:
[样例1] atlantis.out MaoLaoDa will win. 2 [样例2] atlantis.out King will win.时间限制:1000ms
空间限制:256MByte
感觉这题好难啊,居然想了好久才想出来QAQ,某位搞数学的还没弄出来。。。(滑稽),到网上找了一下题目之后居然发现是普及组模拟赛T1...TAT...我实在是太弱了。可是真的好难啊!!!
我感觉这个题目放在普及完全是因为可以很容易的找规律找出结论(其实我也是先这样找到规律再证明的。。。)。。。但是要想证明还是有些恶心的。。。其实结论很简单:
考虑取模,如果一开始的N%3==0的话,那么后手必胜。
证明如下:
假设有个N%3==0;
先手可以先取任意一个2的次幂A ,但是这个A肯定不是3的倍数(自己想想就知道了),那么(N-A)%3!=0,那么后手就可以取1或者2,
使得(N - A - (1或者2)) %3==0,这样先手每次取的时候都不是二的整数次幂,所以不可能胜利,所以后手必胜。。。
代码自己写吧,就300B-。。。