【bzoj3105】新Nim游戏
Portal--> bzoj3105 新Nim游戲
Solution
轉(zhuǎn)化一下問(wèn)題
首先看一下原來(lái)的Nim游戲,先手必勝的條件是:每堆數(shù)量的異或和不為\(0\)
所以在新的游戲中,如果要保證自己(先手)有必勝策略的話,那必須要保證到一開始先手拿走若干堆之后,后手無(wú)法拿走若干堆使得剩下每堆的數(shù)量異或和為\(0\),也就是說(shuō)我們要留下的應(yīng)該是一個(gè)極大線性無(wú)關(guān)組
線性無(wú)關(guān)組這個(gè)的話我們可以通過(guò)線性基解決,具體的話就是如果\(insert\)完了之后這個(gè)數(shù)被變成了\(0\),那么說(shuō)明這個(gè)數(shù)和線性基里面的數(shù)線性相關(guān)
容易注意到\(insert\)的順序會(huì)有影響,那么現(xiàn)在的問(wèn)題就是,應(yīng)該選取哪些數(shù)作為線性基(或者說(shuō)應(yīng)該按照什么順序把那堆數(shù)插到線性基里)
先把結(jié)論擺出來(lái):實(shí)際上只要按照從大到小的順序貪心地加就好了
為什么可以貪心呢?
這里需要借助一個(gè)很神奇的東西:Portal-->擬陣
? 我們?cè)O(shè)\(n\)個(gè)火柴堆的數(shù)目為集合\(S\),如果\(S\)的某個(gè)子集\(R\)不存在任何一個(gè)非空子集異或和為\(0\),那么\(R\in I\)
接下來(lái)我們來(lái)證明一下\(M=(S,I)\)是一個(gè)擬陣
1、首先\(S\)肯定是一個(gè)有限集
2、遺傳性:設(shè)\(A\in I\),則由定義可知\(A\)不存在任何一個(gè)非空子集滿足異或和為\(0\),所以對(duì)于任意\(B \subseteq A\),\(B\)都滿足不存在任何一個(gè)非空子集異或和為\(0\)(因?yàn)?span id="ozvdkddzhkzd" class="math inline">\(B\)的子集也是\(A\)的子集),所以\(B\in I\),所以\(I\)是遺傳的
3、交換性質(zhì):設(shè)\(,A,B\in I\),且\(|B|>|A|\),我們現(xiàn)在要證明\(\exists x\in B-A\)使得\(A\cup\{x\}\in I\),這里考慮用反證法:假設(shè)對(duì)于\(\forall x\in B-A\)均有\(A\cup \{x\}\notin I\),則\(B-A\)中的元素均可以由\(A\)的某個(gè)子集的異或和表示,因此我們可以得到結(jié)論\(B\)中的所有元素均可以由\(A\)的某個(gè)子集的異或和來(lái)表示。但是這與我們前面的假設(shè)\(|B|>|A|\)是矛盾的,所以假設(shè)不成立,得證。
? 我們將\(M=(S,I)\)看成一個(gè)帶權(quán)擬陣,每個(gè)\(S\)中的元素的權(quán)值就是對(duì)應(yīng)的堆中火柴的數(shù)量,那么運(yùn)用貪心算法我們就可以在帶權(quán)擬陣中找出權(quán)值最大的基
所以就能直接用貪心做啦
?
代碼大概長(zhǎng)這個(gè)樣子:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const int MAXN=110,UP=30; int a[MAXN]; int n,m; ll ans; namespace xxj{int a[UP+1];bool insert(int x){for (int i=UP;i>=0;--i)if (x&(1<<i)){if (!a[i]){a[i]=x;break;}x^=a[i];}return x;} }int main(){ #ifndef ONLINE_JUDGEfreopen("a.in","r",stdin); #endifscanf("%d",&n);for (int i=1;i<=n;++i) scanf("%d",a+i);sort(a+1,a+1+n);ans=0;for (int i=n;i>=1;--i)if (!xxj::insert(a[i])) ans+=a[i];printf("%lld\n",ans); }轉(zhuǎn)載于:https://www.cnblogs.com/yoyoball/p/9218187.html
總結(jié)
以上是生活随笔為你收集整理的【bzoj3105】新Nim游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于PIC和FPGA
- 下一篇: SAP数据中心概述