HDU 2516 取石子游戏
这是一道Fibonacci’s Game (斐波那契博弈)
斐波那契博弈模型,是ACM题中常见的组合游戏中的一种,大致上是这样的:
有一堆个数为 n 的石子,游戏双方轮流取石子,满足:
1. 先手不能在第一次把所有的石子取完;
2. 之后每次可以取的石子数介于 1 到对手刚取的石子数的 2 倍之间(包含 1 和对手刚取的石子数的 2 倍)。
约定取走最后一个石子的人为赢家,求必败态。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<algorithm> 5 #include<cmath> 6 #include<queue> 7 #include<set> 8 #include<map> 9 #include<vector> 10 using namespace std; 11 12 int main( ) 13 { 14 const int t = 0x7fffffff ; 15 int f[50] ={ 1 ,1 },i,n; 16 for( i = 2; i < 47 ; i ++) 17 { 18 f[i] = f[i-1] + f[i-2];//printf( "%d %d\n",f[i] ,t ); 19 // if( f[i] < 0 ) break; 20 21 } 22 while( scanf( "%d" ,&n ),n ) 23 { 24 for( i = 1 ; i < 47; i++ ) 25 { 26 if( f[i]==n ) break; 27 } 28 if( i != 47 ) puts("Second win"); 29 else puts( "First win" ); 30 } 31 // system( "pause" ); 32 return 0; 33 }