题意:给出几堆石子数量,每次可以取走一堆中任意数量的石头,也可以将一堆分成两堆,而不取。最后取走者胜。思路:石子数量很大,不能直接算,sg打表找出规律:正常情况下a[i]=i,但是有例外的,就是i%4=0和i%4=3的sg值是交换了的,所以要算某个状态的sg值时,若模4为0,则进行自减,若模4为3则...
转载
2015-05-19 17:30:00
126阅读
2评论
原题链接 考察:博弈论 看了其他题解都是不难发现...,果然是我太弱了(.) 思路: 这题不是打表胜负态,而是打表sg函数.可以发现4个一循环. Code #include <iostream> using namespace std; int n; int main() { int T; scan
转载
2021-05-24 13:05:00
130阅读
2评论
https://leetcode.com/problems/nim-game/博弈论中极为经典的尼姆游戏。有总数为n的石头,每个人可以拿1~m个石头,两个人交替拿,拿到最后一个的人获胜。究竟是先手有利,还是后手有利?1个石子,先手全部拿走; 2个石子,先手全部拿走; 3个石子,先手全部拿走; 4个石子,后手面对的是先手的第1,2,3情况,后手必胜; 5个石子,先手拿走1个让后手面对第4种情况
原创
2022-12-02 00:52:12
204阅读
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2508 Accepted Submission(s): 1297 Problem Descrip
原创
2021-06-04 22:19:15
118阅读
博弈的题目,打表找规律还是相当有用的一个技巧。这个游戏在原始的Nim游戏基础上又新加了一个操作,就是游戏者可以将一堆分成两堆。这个SG函数值是多少并不明显,还是用记忆化搜索的方式打个表,规律就相当显然了。 1 #include 2 #include 3 4 const int maxn = 1...
转载
2015-04-21 12:51:00
159阅读
2评论
题意: 有一堆石子,里面有n个石头,每次可以从中取出1~3个,两人轮流取,最后一个石子被谁取走即为赢家。你先取,问最后谁赢?思路: n%4>0则先手赢,因为每次总是可以给对方留4个石子的倍数,而对方最多只能取到3个,剩下的给先手来取,所以先手赢。C++:1 class Solution {2 p...
转载
2015-10-28 10:26:00
58阅读
2评论
您和您的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 到 3 块石头。 拿掉最后一块石头的人就是胜利者。由您来开局。你们两个都是聪明人,相信都有最佳的游戏策略。 请编写一个函数,来判断您是否可以在给定的石头数量的情况下赢得游戏。比方说,如果堆中有4块石头,那么你永远不会赢得
转载
2018-04-09 22:54:00
239阅读
2评论
NimProblem 301Nim is a game played with heaps of stones, where two players take it in turn to remove any number of stones from any heap until no stones remain.We'll consider the three-he
原创
2022-08-11 14:48:13
38阅读
,请谅解~
Nim or not Nim?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 960 Accepted Submission(s): 466Problem Description
Nim is a two-pla
转载
2017-04-25 12:29:00
51阅读
题意:给你n堆石子,每次操作可以在任意一堆石子里取走一部分或者将这堆石子分成两堆,最后操作的人取胜。 解题思路:利用sg定理来解组合游戏的和,每堆石子看成一个游戏,对于有x个石子的堆,它的所有后继状态有 0, 1, 2, ... , x-1 ,(1, x-1), (2, x-2), .. (d, x-d),于是可以很容易处理出小数据的sg函数,然后可以发现4k+3的sg值为4k+4,4k+4的sg值为4k+3,其他所有x的sg值都为x,根据sg定理每堆sg值异或一下就可以解决了。 /* **********************************************Author .
转载
2013-10-31 22:13:00
114阅读
2评论
假如把Nim游戏的取胜规则改为谁取走最后一个石子谁输的话 先手必胜当且仅当: 1.所有堆的石子数都为1且游戏的SG值为0 2.有些堆的石子数大于1且游戏的SG值不为0
转载
2018-11-13 18:23:00
161阅读
2评论
NIM两道题:hdu 1850:http://acm.hdu.edu.cn/showproblem.php?pid=1850#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
using namespace
原创
2023-09-12 10:43:16
52阅读
链接题意:N堆石子,每堆里有\(a_i\)个石子,两个人可以拿每堆中的任意一个,问先手是否必胜思路:Nim博
原创
2022-07-15 10:35:16
56阅读
Nim游戏的概述:还记得这个游戏吗?给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取。最后拿光珍珠的人输。后来,在一份资料上看到,这种游戏称为“拈(Nim)”。据说,它源自中国,经由被贩卖到美洲的奴工们外传。辛苦的工人们,在工作闲暇之余,用石头玩游戏以排遣寂寞。后来流传到高级人士,则用便士(Pennies),在酒吧柜台上玩。最有名的玩法,是把十二枚便士放
转载
2023-04-20 23:02:52
96阅读
将每堆的数表示为二进制形式,然后将所有数异或起来,如果先手时,异或的结果为非0,则必赢(调整某个二进制的某几位,使其变为0),
原创
2021-07-13 15:54:15
70阅读
Nim概述nim游戏详解(易懂)再强调一遍结论: 对于一个Nim游戏的局面(a1,a2,…,an),它是P-position当且仅当a1^ a2^ … ^ an=0,其中“^”指抑或(xor)运算。 这便是整个程序的基础。话不多说,直接上代码:代码#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#inc
转载
2023-07-01 18:10:11
78阅读
You are playing the following Nim Game with your friend: There is a heap ho removes the last stone will be the
原创
2023-06-07 15:52:22
63阅读
通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是
原创
2023-07-18 18:32:23
183阅读
Nim or not Nim?Problem DescriptionNim is a two-player mathematic game of strategy in which players take turns removing objects from distinct heaps. On...
转载
2015-09-10 10:36:00
89阅读
2评论
题目地址:HDU 3032这题是很好用来练习sg函数打表的一题。下面是sg函数值打表代码:#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define LL long l
原创
2023-04-14 00:20:15
41阅读