hdu 1517 Multiplication Game

题意:

用整数p乘以2到9中的一个数字。斯坦总是从p = 1开始,做乘法,然后奥利乘以这个数,然后斯坦,以此类推。游戏开始前,他们画一个整数1 < n < 4294967295,谁先到达p >= n,谁就是赢家。

 

题解:

看这一道题就会联想起来巴什博弈,但是巴什博弈是不停的从一堆石子里面往外边拿;这个是不停的累乘,我们可以采用巴士博弈类似的思想来做,

我们可以找如果谁面对9*2的次方,那么谁就会输。

 

因此,当n>18时,n不断地除以18,最后如果n<=9则先手必胜,否则后手必胜

 

代码:

 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<string.h>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     double n;
10     while(~scanf("%lf",&n))
11     {
12         while(n>18)
13             n/=18;
14         if(n<=9)
15             printf("Stan wins.\n");
16         else
17             printf("Ollie wins.\n");
18     }
19     return 0;
20 }
View Code

 

posted @ 2019-08-17 17:56  kongbursi  阅读(148)  评论(0编辑  收藏  举报