题目传送门
题目大意
1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win".
思路
找规律会发现每一个必败点都是斐波那契数列中的值
AC Code
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<math.h>
using namespace std;
#define endl '\n'
#define INF 0x3f3f3f3f
// #define int long long
#define debug(a) cout<<#a<<"="<<a<<endl;
typedef long long ll;
const double PI=acos(-1.0);
const double e=exp(1.0);
const int M=1e9+7;
const int N=2e5+7;
inline int mymax(int x,int y){return x>y?x:y;}
inline int mymin(int x,int y){return x<y?x:y;}
int f[59];
void init(){
f[0]=2, f[1]=3;
for(int i=2; i<=45; i++) f[i]=f[i-1]+f[i-2];
}
void solve(){
int n;
init();
while(~scanf("%d", &n) && n){
int flag=1;
for(int i=0; i<=45; i++) if(f[i]==n) {flag=0; break;}
if(flag) cout<<"First win"<<endl;
else cout<<"Second win"<<endl;
}
return ;
}
signed main(){
solve();
return 0;
}