题干:

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

解题报告:

关于Fibonacci博弈的证明:(这里用的是数学归纳法)  斐波那契博弈(Fibonacci Nim)

结论就是,如果这个数是Fibonacci数,则先手败后手胜。

代码很简单,至于为什么二分比暴力枚举慢,我就不知道了。(一个15ms,一个0ms)。

AC代码:

#include<bits/stdc++.h>

using namespace std;

int f[46];

int main()
{
	int n;
	f[1]=1;f[2]=2;
	for(int i = 3; i<=45; i++) {
		f[i] = f[i-1] + f[i-2];
	}
	while(~scanf("%d",&n) && n) {
		if(binary_search(f+1,f+46+1,n) == 1) puts("Second win");
		else puts("First win");
	}
	return 0 ;
}