hdu1517A Multiplication Game(bash博弈)

来源:互联网 发布:相宜本草淘宝有假货吗 编辑:程序博客网 时间:2024/06/14 05:57

题意:

初始数为1,两个人博弈,轮流那2~9的数乘上当前数,如果乘完以后大于等于n,则获胜。

思路:

从n开始往前找必胜点和必败点。(基础理论:http://blog.csdn.net/lgdblue/article/details/15809893

标记n为必败点(因为当你处于n且需要抉择时,你已经输了,坑的是,n等于1时,n是必胜点,因为题目从1开始抉择)

交替寻找必胜点和必败点直到找到小于等于1的点。

代码:

#include <iostream>#include <cstdio>using namespace std;typedef long long ll;int main(){    ll n;    while(~scanf("%lld",&n))    {        int flag = 1;        if(n==1)            printf("Stan wins.\n");        else        {        while(n>1)        {            if(flag==1)            {                n = (n-1)/9+1;                flag = 0;            }            else            {                n = (n-1)/2+1;                flag = 1;            }        }        if(flag==0)            printf("Stan wins.\n");        else            printf("Ollie wins.\n");        }    }    return 0;}

原创粉丝点击