hdu 4023 Doubloon Game(博弈)


http://acm.hdu.edu.cn/showproblem.php?pid=4203



题目大意:一堆硬币有s枚,两个人轮流取k(1,k,k^2,k^3……)枚硬币,取完硬币的人获胜。

                  先取的人能赢就输出第一次最少取多少能赢,否则输出0。

规律:
            
              
分析:若取K^n枚能赢,则取k枚一定能赢,所以取的个数只会是1和k。

代码如下:

<span style="color:#330033;">#include <iostream>
using namespace std;
int main()
{ 
	int ca,s,k;
	while (cin>>ca)
	{
		while (cin>>s>>k)
		{
			if(k%2==1)
			{
				if(s%2==1)
					cout<<"1"<<endl;
				else cout<<"0"<<endl;
			}
			else
			{
				int a=s%(k+1);
				if(a==k)cout<<k<<endl;
				else if(a==0)cout<<"0\n";
				else if(a%2==1)cout<<"1\n";
				else cout<<"0\n";
			}
		}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值