andre_joy

导航

hdu 1517

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1517

题意:从1开始,每个人选择乘2~9中的一个数,谁先大于等于n谁赢。

mark:博弈问题。用逆推的思想。比如n = 1000。那么[999,112]是必败区间,再退一步[111,56]是必胜区间,以此类推……

代码:

#include <stdio.h>

int main()
{
    long long n,p;
    int i;
    while(~scanf("%I64d", &n))
    {
        if(n == 1)
        {
            puts("Stan wins.");
            continue;
        }
        i = 0;
        while(n != 1)
        {
            i++;
            if(i & 1) n = (n-1)/9 + 1;
            else n = (n-1)/2 + 1;
        }
        puts(i%2 ? "Stan wins." : "Ollie wins.");
    }
    return 0;
}

posted on 2012-07-11 15:36  andre_joy  阅读(111)  评论(0编辑  收藏  举报