hdu 2516 取石子游戏

来源:互联网 发布:sql中having的用法 编辑:程序博客网 时间:2024/06/14 15:17

题目链接:点这里。

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

213100000

Sample Output

Second winSecond winFirst win

【分析】

fib博弈,并不懂,只是写了几项猜出来的,有一篇博客有证明:链接

【代码】

    #include<iostream>      #include<cstdio>      #include<cstring>      #include<algorithm>      #include<cmath>      #include<vector>      #include<string>      #include<map>      #define LL long long      #define N 1000000      #define inf 1<<20      using namespace std;      int fib[50];      int main(){          fib[0]=1;fib[1]=2;          for(int i=2;i<45;i++)              fib[i]=fib[i-1]+fib[i-2];          int n;          while(scanf("%d",&n)!=EOF&&n){              int i=0;              for(i=0;i<45;i++)                  if(fib[i]==n)                      break;              if(i<45)                  puts("Second win");              else                  puts("First win");          }          return 0;      }  
原创粉丝点击