【01_292】Nim Game

Nim Game

Total Accepted: 25342 Total Submissions: 50672 Difficulty: Easy

You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.

Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.

For example, if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.

看完答案,觉得以后还要多多磨练!

本来用的递归,麻烦!

解答:

1 class Solution {
2 public:
3     bool canWinNim(int n) {
4         return n % 4;
5     }
6 };
时间: 2024-11-03 22:36:33

【01_292】Nim Game的相关文章

【BZOJ2819】Nim 树状数组+LCA

[BZOJ2819]Nim Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略的.于是vfleaking决定写一个玩Nim游戏的平台来坑玩家.为了设计漂亮一点的初始局面,vfleaking用以下方式来找灵感:拿出很多石子,把它们聚成一堆一堆的,对每一堆编号1,2,3,4,...n,在堆与堆间连边,没有自环与重边,从任意堆到任意堆都只有

【bzoj2819】Nim

Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略的.于是vfleaking决定写一个玩Nim游戏的平台来坑玩家.为了设计漂亮一点的初始局面,vfleaking用以下方式来找灵感:拿出很多石子,把它们聚成一堆一堆的,对每一堆编号1,2,3,4,...n,在堆与堆间连边,没有自环与重边,从任意堆到任意堆都只有唯一一条路径可到达.然后他不

【模板】nim游戏

题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取.每次只能从一堆里取.最后没石子可取的人就输了.假如甲是先手,且告诉你这n堆石子的数量,他想知道是否存在先手必胜的策略. 输入格式 第一行一个整数T<=10,表示有T组数据 接下来每两行是一组数据,第一行一个整数n,表示有n堆石子,n<=10000; 第二行有n个数,表示每一堆石子的数量 输出格式 共T行,如果对于

【bzoj2819】Nim DFS序+树状数组+倍增LCA

题目描述 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略的.于是vfleaking决定写一个玩Nim游戏的平台来坑玩家.为了设计漂亮一点的初始局面,vfleaking用以下方式来找灵感:拿出很多石子,把它们聚成一堆一堆的,对每一堆编号1,2,3,4,...n,在堆与堆间连边,没有自环与重边,从任意堆到任意堆都只有唯一一条路径可到达.然后他不停地进行如下操

【BZOJ2019】nim

直播写题这刺激233 原题: 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略的.于是vfleaking决定写一个玩Nim游戏的平台来坑玩家.为了设计漂亮一点的初始局面,vfleaking用以下方式来找灵感:拿出很多石子,把它们聚成一堆一堆的,对每一堆编号1,2,3,4,...n,在堆与堆间连边,没有自环与重边,从任意堆到任意堆都只有唯一一条路径可到达.然

【POJ】【2975】Nim

博弈论 我哭……思路错误WA了6次?(好像还有手抖点错……) 本题是要求Nim游戏的第一步必胜策略有几种. 一开始我想:先全部异或起来得到ans,从每个比ans大的堆里取走ans个即可,答案如此累计……WA! 第二次:ans与每个a[i]取&,如果不为0即有一种方案……WA! 第三次:ans与每个a[i]取&,如果结果等于ans则有一种方案……WA! 第四次:ans与每个a[i]取^,如果结果<=a[i]则有一种方案……AC! sigh……果然应该“三思”而后行……(附一例子,25/

【bzoj2819】 Nim

www.lydsy.com/JudgeOnline/problem.php?id=2819 (题目链接) 题意:动态树上路径异或和. Solution  Nim取石子游戏的sg值就是每堆石子的异或和,所以问题的实质就是树上路径异或和.  看到题目,树上区间问题果断树链剖分,结果TLE,算了下复杂度nlog2n,结果等于180500000...不知道为什么网上还是有蛮多人用树链剖分A了,难道是我写的太丑了吗..于是蒯了hzwer的树状数组.  统计下dfs序,那么就可以抠出每个节点的子树在树状数组

【BZOJ】【2819】NIM

这题……咋说捏,其实是一道披着博弈论外衣的树上操作问题…… 随便用dfs序或者树链剖分转成序列,然后查询路径上的所有点的NIM和(异或和)就行了,毕竟除了是在树上以外,就是裸的NIM问题. 树链剖分:一开始把线段树写跪了,然后输出“Yes”和“No”的时候全部大写了,再然后发现线段树空间开小了…… 代码如下: 1 //BZOJ 2819 2 #include<cstdio> 3 #include<vector> 4 #include<cstring> 5 #includ

【POJ2975】Nim 博弈

转载请注明出处:http://blog.csdn.net/vmurder/article/details/42610939 其实我就是觉得原创的访问量比未授权盗版多有点不爽233... 题意:多组数据. 问先手有多少种取法使自己必胜. 题解: 首先Nim游戏的异或思想就不说了. 然后我们发现对于某个数,如果其它数的异或和比它小,那么先手拿掉这个数的一部分就可以使所有数异或为0, 先求出所有数异或和,然后再枚举每个数,异或一下就相当于其它所有数的异或和了, 然后可以进行判断出解. 长姿势: ^的优