C++9018:1724——MARSER蒟蒻的小游戏

Posted lyw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++9018:1724——MARSER蒟蒻的小游戏相关的知识,希望对你有一定的参考价值。

题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1724

题目描述

闲来无事,MARSER准备和他的好同(ji)学(you)LJN玩个小游戏。

如图,两人把n(0<n<=10^12)个硬币排成一圈,每次玩家可以取1~2枚硬币,但所取的硬币必须连在一起。取完所有硬币的人获胜。当LJN先手,请你判断谁会胜利,分别输出“LJN win!!!”和Marser win!!!“”

输入

一个数n

输出

题目要求的字符串

样例输入

465134

样例输出

Marser win!!!

题目讲解:


这道题居然是一道博弈论的题目,虽然是三四年级小盆友们的奥数题罢了,我们画几个图来解释一下吧:

这是一个硬币:

我们设有4个硬币:,先手LJN先将硬币取走一个(如图所示),这时还剩下3个硬币,此时LJN获胜了,为什么?因为不论MARSER取走1个还是2个硬币,LJN都能取走剩下的2个或1个硬币,因此LJN获胜。

我们设有5个硬币:,先手LJN不取1个了,取走2个,这时还是剩下3个硬币,同上,LJN依然是赢家。

 

由这两个例子我们可以得出结论,n为硬币个数,如果n-1或者n-2可以被3整除(也就是mod 3 = 0),那么先手LJN获胜,相反假如不能被3整除,则后手MARSER获胜。

 不难列出代码:

#include <iostream>
using namespace std;

int main(){
    long long n;                                                    // 注意,是long long 
    cin >> n;
    if (n - 1 % 3 == 0 || n - 2 % 3 == 0) cout << "LJN win!!!";        // 判断 
    else cout << "Marser win!!!";
}

感谢阅读,点个赞吧~

以上是关于C++9018:1724——MARSER蒟蒻的小游戏的主要内容,如果未能解决你的问题,请参考以下文章

拯救蒟蒻的神器——快读

题解:小蒟蒻的子序列

蒟蒻的9个背包的浩大工程(更新中)

BZOJ 4636 蒟蒻的数列

小蒟蒻的blog美化汇总~

BZOJ4636蒟蒻的数列 STL