洛谷P4301 新Nim遊戲

2022-06-13 14:48:08 字數 696 閱讀 1457

傳統的 nim 遊戲是這樣的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴數量可以不同)。兩個遊戲者輪流操作,每次可以選乙個火柴堆拿走若干根火柴。可以只拿一根,也可以拿走整堆火柴,但不能同時從超過一堆火柴中拿。拿走最後一根火柴的遊戲者勝利。

本題的遊戲稍微有些不同:在第乙個回合中,第乙個遊戲者可以直接拿走若干個整堆的火柴。可以一堆都不拿,但不可以全部拿走。第二回合也一樣,第二個遊戲者也有這樣一次機會。從第三個回合(又輪到第乙個遊戲者)開始,規則和 nim 遊戲一樣。

如果你先拿,怎樣才能保證獲勝?如果可以獲勝的話,還要讓第一回合拿的火柴總數盡量小。

傻子題。

假設先手取完後,剩餘石子堆中存在若干堆異或和為 \(0\),顯然後手必勝。所以我們需要把所有可以異或變成 \(0\) 的石子堆都取掉。

假設沒有第一回合拿的石子最少的限制,那麼直接把數字依次插入線性基,如果這個數字無法插入進去就加入答案。

但是此時要求拿的盡量少,那就排個序就好了。

時間複雜度 \(o(n\log a)\)。

#include using namespace std;

typedef long long ll;

const int n=110,lg=30;

int n,d[n],a[n];

ll ans;

void insert(int x)

洛谷 P1247 取火柴遊戲(nim 遊戲)

簡單說一下 nim遊戲 的博弈原理,先將 a i 轉化成二進位制數,那麼題目變成了每一次可以取走任意 a i 的 任意個 1sum 是所有 a i 的異或值如果 sum 0,說明有偶數個 1,先手拿 x,後手也拿 x,先手必敗如果 sum 0,我們考慮去掉一堆,這 n 1 堆相互異或得到的結果 re...

洛谷 2197 模板 nim遊戲

題目描述 甲,乙兩個人玩nim取石子遊戲。nim遊戲的規則是這樣的 地上有n堆石子 每堆石子數量小於10000 每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這n堆石子的數量,他想知道是否存在先手必勝的策略。輸...

洛谷 nim遊戲 模板nim博弈論

題目傳送 題意 模板nim博弈論。思路 所有數的異或和如果為0,那麼先手必輸,否則先手必贏。證明 1.首先很明顯的乙個必輸態為 全部石子都為0,那麼先手直接輸 此時異或和為0 2.那麼當異或和不為0的時候,我們假設現在的異或和為k,那麼現在k的最高位的1的位置,一定對應於現在的石子堆中的一堆石子的最...