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