HDU 1517

题意略。

思路:

我们分别来考虑n取到的各个区间,从而发现其中的规律:

[2,9] 明显 Stan 必胜。

但是当n = 9 + 1时,Stan无论如何也不能取胜,并且此时,假设 Stan 取值 x ,那在[10 , x * 9]这个范围内一定是Ollie必胜。

Stan 一定会贪心地令x = 2,这样可以尽可能减损Ollie的必胜范围,而Ollie会使自己的数字选择成9,这样可以尽可能扩大自己的必胜范围。

所以:[10,18 = 2 * 9] Ollie 必胜

当n = 18 + 1时,Ollie无论如何也没有办法取胜了,这是他也会采取和 Stan 同样的贪心操作,通过令自己选择的所有数字取2来减损接下来 Stan 的必胜范围。

而Stan一定会使自己的所有数字选9来扩大自己的必胜范围。

所以:[19 , 162 = 9 * 2 * 9] Stan 必胜

由此可以找出解题方法,我把当前数字cur = 1,一次乘9,一次乘2,.......这样循环地乘下去,看什么时候超过n,超过n时看看现在乘了几次,

奇数次则是 Stan 赢,偶数次则是 Ollie 赢。

代码附上:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

int main(){
    LL n;
    while(scanf("%d",&n) == 1){
        LL mul = 1;
        int i;
        for(i = 0;mul < n;++i){
            mul *= LL((i & 1) ? 2 : 9);
        }
        printf("%s\n",(i & 1) ? "Stan wins." : "Ollie wins.");
    }
    return 0;
}

 

posted @ 2019-08-28 14:50  温和的提比略  阅读(154)  评论(0编辑  收藏  举报