您的位置:首页 > 其它

hdu 1517 A Multiplication Game(博弈找规律)

2012-09-05 16:35 381 查看
1 2-----9 、 (9+1) ------- (2*9)、(2*9+1) ------- (2*9*9) 、(2*9*9+1) ------ (2*9*9*2)、(2*9*9*2+1) ------(2*9*9*2*9) ......

N P N P N

S O S O S

*9 *2 *9 *2 *9

P为必败点(下一个选手获胜),N为必胜点(上一个选手获胜)。

这里P、N的划分:

一段N点的最后 *2 是因为P点无论哪种方案到达N点,例如点2*9,就是最后一个可由2乘以9得到的数,一旦大于2*9,则由点2就绝对不能通过乘以2----9的某个数达到(不能满足P的属性)。

一段P点的最后 *9 是因为N点至少有一种方案到达P点,例如 2*9*9 ,只有2*9通过乘以9得到满足条件的数,一旦大于 2*9*9 ,则所有前一个N段中的数都不能通过乘以2-----9的某个数得到满足条件的数,即>=2*9*9+x (x>0)。(不能满足N的属性)

所以,以每段最后一个数作为判断标准。

代码:

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n>=1 && n<=9) {printf("Stan wins.\n"); continue;}
bool flag=true;
int temp=1;
while(temp<n)
{
if(flag)
{
temp*=9;
flag=false;
}
else
{
temp*=2;
flag=true;
}
}
if(flag) printf("Ollie wins.\n");
else  printf("Stan wins.\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: