Problem Description

1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win".

Input

输入有多组.每组第1行是2<=n<2^31. n=0退出.

Output

先取者负输出"Second win". 先取者胜输出"First win". 参看Sample Output.

Sample Input

2
13
10000
0

Sample Output

Second win
Second win
First win
解题思路:斐波那契博弈。斐波那契博弈模型,大致上是这样的:有一堆个数为 n 的石子,游戏双方轮流取石子,满足:

1. 先手不能在第一次把所有的石子取完;
2. 之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。
约定取走最后一个石子的人为赢家,求必败态。
我们简单举几个栗子:

当n=2时,后手必赢;

当n=3时,后手必赢;

当n=4时,只要先手取1个,剩下3个,无论后手取多少个,先手必赢;

当n=5时,①若先手先取1个,剩下4个,此时后手掌握n=4这种局面,则后手必赢;②若先手取2个,根据规则,后手可以一次性取完剩下的3个,则后手必赢;所以先手无论怎么取,此时后手必赢。

当n=6时,先手只要取1个,先手就掌握了n=5这种局面,即先手必赢;

当n=7时,先手只要取2个,先手就掌握了n=5这种局面,即先手必赢;

当n=8时,①若先手取1个时,后手就掌握了n=7这种局面,即后手必赢;②若先手取2个时,后手就掌握了n=6这种局面,即后手必赢;③若先手取3个,根据规则,后手可以一次性取走剩下的5个,剩下的情况都是后手必赢;所以无论先手怎么取,此时后手必赢。

......

继续推导下去,我们可以发现,只要n满足斐波那契数列2,3,5,8,13......,则后手必赢,否则先手必赢。相关证明看这:斐波那契博弈

由于n在int范围内,且fib[45]刚好超过int范围,所以fib数组长度只需为44即可。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
int main()
{
int n,fib[]={,};bool flag;
for(int i=;i<;++i)//只需枚举44个fib数即可
fib[i]=fib[i-]+fib[i-];
while(cin>>n && n){
flag=false;
for(int i=;i<;++i)
if(fib[i]==n){flag=true;break;}
if(flag)cout<<"Second win"<<endl;//如果满足斐波那契数列,则后手必赢
else cout<<"First win"<<endl;//否则先手必赢
}
return ;
}

最新文章

  1. 3.3 js函数
  2. uva 1599 ideal path(好题)——yhx
  3. mod-mono
  4. SQLSERVER2008R2数据库的整体导出及单个表的导出步骤
  5. 模块(modue)的概念:
  6. CSS的4种引入方式及优先级
  7. AOP动态代理解析1-标签的解析
  8. BNUOJ 26579 Andrew the Ant
  9. 2016-5-19模拟测试 bzoj3652 bzoj3653 bzoj3654
  10. bzoj 1449 [JSOI2009]球队收益(费用拆分,最小费用流)
  11. mongdb修改密码
  12. XCL-Charts画一个图(CurveChart)
  13. 从源码看Android中sqlite是怎么读DB的(转)
  14. Nhibernate学习教程(1)-- 开篇有益
  15. 优秀的基于VUE移动端UI框架合集
  16. JS中apply和call的应用和区别
  17. 利用BLKTRACE分析IO性能
  18. CVE-2017-8464 分析
  19. 数组升序排序的方法Arrays.sort();的应用
  20. swift textView内容显示不全

热门文章

  1. Python初学者容易忽略的一些细节
  2. js之条件判断
  3. 【tips】自动化测试工具 - selenium和phantomJS
  4. [UOJ48] 核聚变反应强度
  5. [USACO5.3]校园网Network of Schools 缩点
  6. pij——1125 Stockbroker Grapevine
  7. 洛谷——P1255 数楼梯
  8. poj——1006 生理周期
  9. [LeetCode] 035. Search Insert Position (Medium) (C++)
  10. MySQL hash分区(四)