hdu1517 小小的博弈

  只要记住2 和 9 交替出现就行了(当然 n==2 n==9 的时候例外)


下面的说明来自:http://blog.sina.com.cn/s/blog_67e7f5fa0100ij5o.html

这题其实不是求必败点,必胜点,而是求必败段,和必胜段,经过推敲后发现转换下就变成求必败,必胜段的左届,比如162,那很明显>=162/9的都是必胜点,那由博弈的思想得到,任意一步都进入必胜点的是必败点,那又很明显这个值处以2的那一段都是必败点,然后再根据博弈的思想,通过一步能进入必败点的必是必胜点,那很明显这个值再除以9的明显又是必胜点,如此往复,不断的处于2和9然后做个标记就能知道必败点和必胜点了,只要注意界限问题

#include <stdio.h>
int main()
{
	__int64 sum;
	int flag,res;
	while(scanf("%I64d",&sum)!=EOF)
	{
		if(sum==1)
		{
			puts("Stan wins.");
			continue;
		}
		else
		{
			flag=temp=1;

			//让sum依次处理9 2 9 2 ......
			while(sum > 1)
			{
				//一开始是9
				if(flag)
				{
					temp = 9;
					flag = 0;
				}

				//然后是2
				else
				{
					temp=2;
					flag=1;
				}
				sum = sum%temp==0?(sum/temp:sum/temp+1);
			}
			//这个...是总结出来的规律..
			if(temp==9)
				puts("Stan wins.");
			else
				puts("Ollie wins.");
			}
		}
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值