poj 2505 A multiplication game
阿新 • • 發佈:2017-12-28
sin turn 必須 col href 開始 esp 得到 style
A multiplication game
POJ - 2505
題目大意:兩個人輪流玩遊戲,Stan先手,數字 p從1開始,Stan乘以一個2-9的數,然後Ollie再乘以一個2-9的數,直到誰先將p乘到p>=n時那個人就贏了,而且輪到某人時,某人必須乘以2-9的一個數。
/* 博弈,找規律,首先我們容易得到在 [2,9]這個區間,是Stan必勝 [10,18]這個區間,是Ollie必勝 那麽下個區間左邊肯定是[18+1,?],是Stan必勝 區間閉應該填一個什麽數呢,因為18是一個必敗點,所以輪到Stan開始,那麽他可以乘以一個9,即18*9之內,Stan都必勝 我們可以將18看成9*2,也就是說Stan越想接近N,Ollie肯定越不想他達到N 所以下個區間為[18+1,9*2*9],其實找規律也能找出一個這樣的規律 [9*2*9+1,9*2*9*2],Ollie必勝 [9*2*9*2+1,9*2*9*2*9],Stan必勝*/ #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> const int MAXN=10000; using namespace std; int main(){ long long num; while(~scanf("%lld",&num)){ while(num>18)num=(num-1)/18+1; if(num<=9){ printf("Stan wins.\n"); continue; } if(num>9&&num<=18){ printf("Ollie wins.\n"); continue; } } return 0; }
poj 2505 A multiplication game