P5514 永夜的報應(異或,數學)

2021-09-26 11:57:59 字數 843 閱讀 4338

p5514 永夜的報應

做kruskal重構樹膩了,來拓展下視野。。。

定義一組數的權值為該組內所有數的異或和. 請求出一種分組方案,使得分出的所有組數的權值之和最小,輸出權值之和的最小值.

我們知道異或運算的基本法則:同號則為假,異號則為真.

不妨對每一位進行分析:

0 ^ 0 = 0

1 ^ 0 = 0 ^ 1 = 1

1 ^ 1 =0

可以發現每一位異或的值一定小於等於它們二進位制的那一位的和,所以就能推出兩個數的異或和一定小於它們之和,所以這道題的答案就是全部異或起來啦!

除此之外,異或還有以下性質:

1、交換律

2、結合律(即(a^b)^c == a^(b^c))

3、對於任何數x,都有x^x=0,x^0=x

4、自反性 a ^ b ^ b = a ^ 0 = a

尤其是第三點自反性,經常出現在各種題目中.

留一道思考題:

乙個陣列存放若干整數,乙個數出現奇數次,其餘數均出現偶數次,找出這個出現奇數次的數?

陣列全部異或即可.

#include

using

namespace std;

int n,ans;

intmain()

printf

("%d\n"

,ans)

;return0;

}

拓展視野是非常有必要的. 防止在考場上束手無策.

P5514 MtOI2019 永夜的報應 題解

csdn同步 原題鏈結 簡要題意 給定乙個長度為 n 的序列 a 你需要將其分為若干組,使得每一組的異或之和最小。求這個最小值。實際上這題是個結論題。先考慮乙個問題 對於乙個數 x 唯一的一組 s 你會選擇將 x 單分一組還是加入 s 呢?由於異或的結合律,所以我們可以抽象地假設一手,設 s 中所有...

東方永夜抄資源解包

這篇文章首次發表在我的貼吧了,裡面還有東方紅魔鄉的解包過程,不過比較麻煩有興趣的自己看吧 東方每作解包都有點不一樣,這裡我選擇比較典型的永夜抄來示範 成品原始碼 東方dat解包器 用od開啟,在文字字串參考裡找th08.dat,有三個引用,乙個個試,還好第乙個就是我的目標 跳到0x4461a9這裡,...

永坤電機SEO三天兩夜課程學習總結

通過這次的學習。我在以前的基礎上進一步鞏固了網際網路上的很多知識並運用到我們產品上。例如我們公司的產品 電機,通過網際網路這一渠道來推廣。目的是為了提高 收錄,提高 權重,提高精準流量。對於如何是著手這一工作,我把知識點分成以下幾點,一,站內優化 經過這次營銷分析課程,我們可以充分利用我們電機的優點...