POJ-1067-取石子游戏

378 篇文章 0 订阅

其实就是威佐毒博弈(Wythoff Game),具体可以百度一下《关于博弈论基础知识的一些总结》,上面有提到这个博弈所得到的2个结论

即假设必败点必然(a,b) 则有 a=floor(i*(1+5^0.5)/2) ,b=a+i; (i为整数)

最开始想的是枚举必败点,结果TLE,看到数据就觉得不行了。

后来发现将上面的式子作差 b-a=i,则我们可以顺利得到求出必败点的a,然后仅仅是需要判断它是否等于我们当前输入的值即可。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
int n,m;
int main()
{
    double val=(sqrt(5.0)+1)/2;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
	if(n>m)
	    swap(n,m);
	int ans=1;
	if(floor((m-n)*val)==n)
	    ans=0;
	printf("%d\n",ans);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值