游戏

游 戏 游戏

题目链接:jzoj 1984

题目大意

有很多个东西,每个人轮流去 2 x 2^x 2x个( x x x为正整数),谁最后取完,谁就赢。
一共玩三局,给出东西的数量,说出谁赢。如果是先出的赢,说出他第一次拿的最小数量。
(先出赢为 “ M a o L a o D a w i l l w i n . ” “MaoLaoDa willwin.” MaoLaoDawillwin.,后出赢为 “ K i n g w i l l w i n . ” “King will win.” Kingwillwin.

样例输入1

8
4
2

样例输出1

MaoLaoDa will win.
2
MaoLaoDa will win.
1
MaoLaoDa will win.
2

样例输入2

3
8
2

样例输出2

King will win.
MaoLaoDa will win.
2
MaoLaoDa will win.
2

数据范围

0<n<10^1000002

思路

这道题是一道规律题。
我们推一下就可以发现,当东西的数量能被三整除时,后出的会赢。但不能被三整除时,先出的会赢,而且他第一次拿的最小数量为数量对三取模的值。

不过,这道题东西的数量值很大很大。
我们可以知道,当一个数的每一位的和能被三整除时,这个数也能被三整除。
我们用这个方法,就可以解决那些很大的数了。

那么这样子,我们就可以解决这道题了。

代码

#include<cstdio>
#include<iostream>
using namespace std;
string n;
int nn;
int main()
{
	//freopen("atlantis.in","r",stdin);
	//freopen("atlantis.out","w",stdout);
	for (int i=1;i<=3;i++)
	{
		cin>>n;//读入
		nn=0;//初始化
		for (int j=0;j<n.size();j++)
		nn+=n[j]-48;//求出每一位的和
		if (nn%3==0) printf("King will win.\n");//能被3整除,则后出的赢
		else printf("MaoLaoDa will win.\n%d\n",nn%3);//不能,则先出的赢
	}
	//fclose(stdin);
	//fclose(stdout);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值