您的位置:首页 > 其它

HDOJ 题目A Multiplication Game(博弈,k(2~9)倍博弈)

2014-08-09 10:49 316 查看

A Multiplication Game

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 3706    Accepted Submission(s): 2106


[align=left]Problem Description[/align]
Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers 2 to 9. Stan always starts with p = 1, does his multiplication, then Ollie multiplies the number, then Stan and so on. Before a game
starts, they draw an integer 1 < n < 4294967295 and the winner is who first reaches p >= n.

 

[align=left]Input[/align]
Each line of input contains one integer number n.

 

[align=left]Output[/align]
For each line of input output one line either

Stan wins.

or

Ollie wins.

assuming that both of them play perfectly.

 

[align=left]Sample Input[/align]

162
17
34012226

 

[align=left]Sample Output[/align]

Stan wins.
Ollie wins.
Stan wins.

 

[align=left]Source[/align]
University of Waterloo Local Contest 2001.09.22

 

[align=left]Recommend[/align]
LL   |   We have carefully selected several similar problems for you:  1404 1079 1536 1524 1729 
思路:(转自http://qianmacao.blog.163.com/blog/static/203397180201223174133470/

①、如果输入是2~9,因为Stan是先手,所以Stan必胜。
②、如果输入是10~18(9*2),因为Ollie是后手,不管第一次Stan乘的是多少,Stan肯定在2~9之间,如果Stan乘以2,那么Ollie就乘以9,那么Ollie乘以大于1的数都能超过10~18中的任何一个数,Ollie必胜。
③、如果输入的是19~162(9*2*9),那么这个范围Stan必胜。
④、如果输入是163~324(2*9*2*9),这个是Ollie的必胜范围。
…………
可以发现必胜态是对称的。
如果“我方”首先给出了一个在N不断除18后的得到不足18的数M,“我方”就可以胜利,然而双方都很聪明,所以这样胜负就决定与N了,如果N不断除18后的得到不足18的数M,如果1<M<=9则先手胜利,即Stan wins.如果9<M<=18则后手胜利。
ac代码
#include<stdio.h>
int main()
{
double n;//要设浮点型
while(scanf("%lf",&n)!=EOF)
{
while(n>18)
n/=18;
if(n<=9)
printf("Stan wins.\n");
else
printf("Ollie wins.\n");
}
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: