BZOJ3105 新Nim遊戲(線性基)

2022-03-20 07:12:50 字數 868 閱讀 5824

bzoj

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

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

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

第一行為整數k。即火柴堆數。第二行包含k個不超過109的正整數,即各堆的火柴個數。

輸出第一回合拿的火柴數目的最小值。如果不能保證取勝,輸出-1。

5 5 6 6 5 5

k<=100

很顯然,就是讓你選擇和盡可能小的數,使得剩下的數的任意子集的異或和不為\(0\)

排序之後,依次插入線性基中貪心即可。

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define rg register

inline int read()

struct xxj

x^=p[i];

} }int query(int x)

return x;

}}g;

int n,a[500];

ll ans=0;

int main()

bzoj3105 新Nim遊戲 線性基 高斯消元

解題思路 由於nim遊戲先手必勝的條件是每堆石子xor和不為0,那麼我們要求的即是 剩下最多的石子,且其不存在乙個非空子集異或和為0。即求解極大線性無關組。證明是個擬陣 不會證 因此只要把a i 從大到小排序,依次貪心的新增到當前集合就可以了,若其可以成為乙個基則剩下,否則拿走。有點想kruskal...

CQOI2013 新nim遊戲題解

傳統的nim遊戲是這樣的 有一些火柴堆,每堆都有若干根火柴 不同堆的火柴數量可以不同 兩個遊戲者輪流操作,每次可以選乙個火柴堆拿走若干根火柴。可以只拿一根,也可以拿走整堆火柴,但不能同時從超過一堆火柴中拿。拿走最後一根火柴的遊戲者勝利。本題的遊戲稍微有些不同 在第乙個回合中,第乙個遊戲者可以直接拿走...

GDOI2016模擬8 21新Nim遊戲

題目 傳統的nim遊戲是這樣的 有一些火柴堆,每堆都有若干根火柴 不同堆的火柴數量可以不同 兩個遊戲者輪流操作,每次可以選乙個火柴堆拿走若干根火柴。可以只拿一根,也可以拿走整堆火柴,但不能同時從超過一堆火柴中拿。拿走最後一根火柴的遊戲者勝利。本題的遊戲稍微有些不同 在第乙個回合中,第乙個遊戲者可以直...