1. 程式人生 > >poj 2505 A multiplication game

poj 2505 A multiplication game

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