HDU2516-取石子游戏
取石子游戏
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2640 Accepted Submission(s): 1503
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 Output.
Sample Input
2 13 10000 0
Sample Output
Second win Second win First win
Source
打表找规律,规律为斐波那契数列
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <string> #include <algorithm> #include <queue> #include <set> using namespace std; int n; set<int>fib; int main(){ long long a=2,b=3,c=5; fib.insert(2); fib.insert(3); long long end = (1<<31)-1; //cout<<end<<endl; while(c <= end){ fib.insert(c); a = b; b = c; c = a+b; } while(cin >> n && n){ if(fib.count(n)==0){ cout<<"First win"<<endl; }else{ cout<<"Second win"<<endl; } } return 0; }