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 }