日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【bzoj3105】新Nim游戏

發(fā)布時(shí)間:2025/6/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【bzoj3105】新Nim游戏 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。